openbmc.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* Call for testing: spi-mem driver for Aspeed SMC controllers
       [not found] <20220214094231.3753686-1-clg@kaod.org>
@ 2022-02-25  5:29 ` Joel Stanley
  2022-02-27 18:53   ` Cédric Le Goater
  2022-03-01  9:57   ` John Wang
  0 siblings, 2 replies; 27+ messages in thread
From: Joel Stanley @ 2022-02-25  5:29 UTC (permalink / raw)
  To: OpenBMC Maillist; +Cc: Lei Yu, Ryan Chen, Cédric Le Goater

Cedric has authored a new drive for the SPI NOR devices on the ASPEED
SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
subsystem, which should mean it can go upstream.

This is great news, as our current driver is half upstream, half in
the openbmc tree, due to some issues getting it merged as part of the
spi-nor subsystem.

It would be great to have testing. I've created a commit that patches
in support to whatever kernel tree you're using. Hopefully this makes
it easier to test atop your internal branches:

https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551

Cherry pick this commit into your tree, and see how it goes, and report back.

I plan to switch the openbmc tree to this driver when we next rebase
the kernel. We could also backport it to dev-5.15 as an option.

You can direct testing results to this thread, or reply directly to
the upstream thread:

https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/

Cheers,

Joel

---------- Forwarded message ---------
From: Cédric Le Goater <clg@kaod.org>
Date: Mon, 14 Feb 2022 at 09:42
Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
<tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
<richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
<linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
<chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>


Hi,

This series adds a new SPI driver using the spi-mem interface for the
Aspeed static memory controllers of the AST2600, AST2500 and AST2400
SoCs.

 * AST2600 Firmware SPI Memory Controller (FMC)
 * AST2600 SPI Flash Controller (SPI1 and SPI2)
 * AST2500 Firmware SPI Memory Controller (FMC)
 * AST2500 SPI Flash Controller (SPI1 and SPI2)
 * AST2400 New Static Memory Controller (also referred as FMC)
 * AST2400 SPI Flash Controller (SPI)

It is based on the current OpenBMC kernel driver [1], using directly
the MTD SPI-NOR interface and on a patchset [2] previously proposed
adding support for the AST2600 only. This driver takes a slightly
different approach to cover all 6 controllers.

It does not make use of the controller register disabling Address and
Data byte lanes because is not available on the AST2400 SoC. We could
introduce a specific handler for new features available on recent SoCs
if needed. As there is not much difference on performance, the driver
chooses the common denominator: "User mode" which has been heavily
tested in [1]. "User mode" is also used as a fall back method when
flash device mapping window is too small.

Problems to address with spi-mem were the configuration of the mapping
windows and the calibration of the read timings. The driver handles
them in the direct mapping handler when some knowledge on the size of
the flash device is know. It is not perfect but not incorrect either.
The algorithm is one from [1] because it doesn't require the DMA
registers which are not available on all controllers.

Direct mapping for writes is not supported (yet). I have seen some
corruption with writes and I preferred to use the safer and proven
method of the initial driver [1]. We can improve that later.

The driver supports Quad SPI RX transfers on the AST2600 SoC but it
didn't have the expected results. Therefore it is not activated yet.
This needs more tests.

The series does not remove the current Aspeed SMC driver but prepares
ground for its removal by changing its CONFIG option. This last step
can be addressed as a followup when the new driver using the spi-mem
interface has been sufficiently exposed.

Tested on:

 * OpenPOWER Palmetto (AST2400)
 * Evaluation board (AST2500)
 * OpenPOWER Witherspoon (AST2500)
 * Evaluation board (AST2600 A0)
 * Rainier board (AST2600)

[1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
[2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394

Thanks,

C.

Cédric Le Goater (10):
  mtd: spi-nor: aspeed: Rename Kconfig option
  dt-bindings: spi: Add Aspeed SMC controllers device tree binding
  spi: spi-mem: Add driver for Aspeed SMC controllers
  spi: aspeed: Add support for direct mapping
  spi: aspeed: Adjust direct mapping to device size
  spi: aspeed: Workaround AST2500 limitations
  spi: aspeed: Add support for the AST2400 SPI controller
  spi: aspeed: Calibrate read timings
  ARM: dts: aspeed: Enable Dual SPI RX transfers
  spi: aspeed: Activate new spi-mem driver

 drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
 .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
 arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
 arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
 arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
 drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
 drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
 drivers/spi/Kconfig                           |   11 +
 drivers/spi/Makefile                          |    1 +
 9 files changed, 1369 insertions(+), 3 deletions(-)
 create mode 100644 drivers/spi/spi-aspeed-smc.c
 create mode 100644
Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml

--
2.34.1

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-02-25  5:29 ` Call for testing: spi-mem driver for Aspeed SMC controllers Joel Stanley
@ 2022-02-27 18:53   ` Cédric Le Goater
  2022-02-28  6:30     ` Tao Ren
  2022-03-02  6:05     ` Tao Ren
  2022-03-01  9:57   ` John Wang
  1 sibling, 2 replies; 27+ messages in thread
From: Cédric Le Goater @ 2022-02-27 18:53 UTC (permalink / raw)
  To: Joel Stanley, OpenBMC Maillist; +Cc: Lei Yu, Ryan Chen

On 2/25/22 06:29, Joel Stanley wrote:
> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> subsystem, which should mean it can go upstream.
> 
> This is great news, as our current driver is half upstream, half in
> the openbmc tree, due to some issues getting it merged as part of the
> spi-nor subsystem.
> 
> It would be great to have testing. I've created a commit that patches
> in support to whatever kernel tree you're using. Hopefully this makes
> it easier to test atop your internal branches:
> 
> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> 
> Cherry pick this commit into your tree, and see how it goes, and report back.
> 
> I plan to switch the openbmc tree to this driver when we next rebase
> the kernel. We could also backport it to dev-5.15 as an option.
> 
> You can direct testing results to this thread, or reply directly to
> the upstream thread:
> 
> https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/

or grab the v2 from :

   https://github.com/legoater/linux/tree/openbmc-5.15

I have addressed the comments on driver bind/unbind.

Thanks,

C.

> 
> Cheers,
> 
> Joel
> 
> ---------- Forwarded message ---------
> From: Cédric Le Goater <clg@kaod.org>
> Date: Mon, 14 Feb 2022 at 09:42
> Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
> 
> 
> Hi,
> 
> This series adds a new SPI driver using the spi-mem interface for the
> Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> SoCs.
> 
>   * AST2600 Firmware SPI Memory Controller (FMC)
>   * AST2600 SPI Flash Controller (SPI1 and SPI2)
>   * AST2500 Firmware SPI Memory Controller (FMC)
>   * AST2500 SPI Flash Controller (SPI1 and SPI2)
>   * AST2400 New Static Memory Controller (also referred as FMC)
>   * AST2400 SPI Flash Controller (SPI)
> 
> It is based on the current OpenBMC kernel driver [1], using directly
> the MTD SPI-NOR interface and on a patchset [2] previously proposed
> adding support for the AST2600 only. This driver takes a slightly
> different approach to cover all 6 controllers.
> 
> It does not make use of the controller register disabling Address and
> Data byte lanes because is not available on the AST2400 SoC. We could
> introduce a specific handler for new features available on recent SoCs
> if needed. As there is not much difference on performance, the driver
> chooses the common denominator: "User mode" which has been heavily
> tested in [1]. "User mode" is also used as a fall back method when
> flash device mapping window is too small.
> 
> Problems to address with spi-mem were the configuration of the mapping
> windows and the calibration of the read timings. The driver handles
> them in the direct mapping handler when some knowledge on the size of
> the flash device is know. It is not perfect but not incorrect either.
> The algorithm is one from [1] because it doesn't require the DMA
> registers which are not available on all controllers.
> 
> Direct mapping for writes is not supported (yet). I have seen some
> corruption with writes and I preferred to use the safer and proven
> method of the initial driver [1]. We can improve that later.
> 
> The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> didn't have the expected results. Therefore it is not activated yet.
> This needs more tests.
> 
> The series does not remove the current Aspeed SMC driver but prepares
> ground for its removal by changing its CONFIG option. This last step
> can be addressed as a followup when the new driver using the spi-mem
> interface has been sufficiently exposed.
> 
> Tested on:
> 
>   * OpenPOWER Palmetto (AST2400)
>   * Evaluation board (AST2500)
>   * OpenPOWER Witherspoon (AST2500)
>   * Evaluation board (AST2600 A0)
>   * Rainier board (AST2600)
> 
> [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
> 
> Thanks,
> 
> C.
> 
> Cédric Le Goater (10):
>    mtd: spi-nor: aspeed: Rename Kconfig option
>    dt-bindings: spi: Add Aspeed SMC controllers device tree binding
>    spi: spi-mem: Add driver for Aspeed SMC controllers
>    spi: aspeed: Add support for direct mapping
>    spi: aspeed: Adjust direct mapping to device size
>    spi: aspeed: Workaround AST2500 limitations
>    spi: aspeed: Add support for the AST2400 SPI controller
>    spi: aspeed: Calibrate read timings
>    ARM: dts: aspeed: Enable Dual SPI RX transfers
>    spi: aspeed: Activate new spi-mem driver
> 
>   drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
>   .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
>   arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
>   arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
>   arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
>   drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
>   drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
>   drivers/spi/Kconfig                           |   11 +
>   drivers/spi/Makefile                          |    1 +
>   9 files changed, 1369 insertions(+), 3 deletions(-)
>   create mode 100644 drivers/spi/spi-aspeed-smc.c
>   create mode 100644
> Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
> 
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-02-27 18:53   ` Cédric Le Goater
@ 2022-02-28  6:30     ` Tao Ren
  2022-03-02  6:05     ` Tao Ren
  1 sibling, 0 replies; 27+ messages in thread
From: Tao Ren @ 2022-02-28  6:30 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen

Thank you Cedric and Joel! I have AST2400, AST2500 and AST2600 OpenBMC
platforms and I can test these patches. It may take a few days as I'm
just back from holiday (need to catch up at work), but I should be able
to share my findings by middle this week.


Cheers,

Tao

On Sun, Feb 27, 2022 at 07:53:37PM +0100, Cédric Le Goater wrote:
> On 2/25/22 06:29, Joel Stanley wrote:
> > Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> > SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> > subsystem, which should mean it can go upstream.
> > 
> > This is great news, as our current driver is half upstream, half in
> > the openbmc tree, due to some issues getting it merged as part of the
> > spi-nor subsystem.
> > 
> > It would be great to have testing. I've created a commit that patches
> > in support to whatever kernel tree you're using. Hopefully this makes
> > it easier to test atop your internal branches:
> > 
> > https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> > 
> > Cherry pick this commit into your tree, and see how it goes, and report back.
> > 
> > I plan to switch the openbmc tree to this driver when we next rebase
> > the kernel. We could also backport it to dev-5.15 as an option.
> > 
> > You can direct testing results to this thread, or reply directly to
> > the upstream thread:
> > 
> > https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
> 
> or grab the v2 from :
> 
>   https://github.com/legoater/linux/tree/openbmc-5.15
> 
> I have addressed the comments on driver bind/unbind.
> 
> Thanks,
> 
> C.
> 
> > 
> > Cheers,
> > 
> > Joel
> > 
> > ---------- Forwarded message ---------
> > From: Cédric Le Goater <clg@kaod.org>
> > Date: Mon, 14 Feb 2022 at 09:42
> > Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> > To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> > Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> > <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> > Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> > <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> > <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> > Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> > <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> > Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> > <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
> > 
> > 
> > Hi,
> > 
> > This series adds a new SPI driver using the spi-mem interface for the
> > Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> > SoCs.
> > 
> >   * AST2600 Firmware SPI Memory Controller (FMC)
> >   * AST2600 SPI Flash Controller (SPI1 and SPI2)
> >   * AST2500 Firmware SPI Memory Controller (FMC)
> >   * AST2500 SPI Flash Controller (SPI1 and SPI2)
> >   * AST2400 New Static Memory Controller (also referred as FMC)
> >   * AST2400 SPI Flash Controller (SPI)
> > 
> > It is based on the current OpenBMC kernel driver [1], using directly
> > the MTD SPI-NOR interface and on a patchset [2] previously proposed
> > adding support for the AST2600 only. This driver takes a slightly
> > different approach to cover all 6 controllers.
> > 
> > It does not make use of the controller register disabling Address and
> > Data byte lanes because is not available on the AST2400 SoC. We could
> > introduce a specific handler for new features available on recent SoCs
> > if needed. As there is not much difference on performance, the driver
> > chooses the common denominator: "User mode" which has been heavily
> > tested in [1]. "User mode" is also used as a fall back method when
> > flash device mapping window is too small.
> > 
> > Problems to address with spi-mem were the configuration of the mapping
> > windows and the calibration of the read timings. The driver handles
> > them in the direct mapping handler when some knowledge on the size of
> > the flash device is know. It is not perfect but not incorrect either.
> > The algorithm is one from [1] because it doesn't require the DMA
> > registers which are not available on all controllers.
> > 
> > Direct mapping for writes is not supported (yet). I have seen some
> > corruption with writes and I preferred to use the safer and proven
> > method of the initial driver [1]. We can improve that later.
> > 
> > The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> > didn't have the expected results. Therefore it is not activated yet.
> > This needs more tests.
> > 
> > The series does not remove the current Aspeed SMC driver but prepares
> > ground for its removal by changing its CONFIG option. This last step
> > can be addressed as a followup when the new driver using the spi-mem
> > interface has been sufficiently exposed.
> > 
> > Tested on:
> > 
> >   * OpenPOWER Palmetto (AST2400)
> >   * Evaluation board (AST2500)
> >   * OpenPOWER Witherspoon (AST2500)
> >   * Evaluation board (AST2600 A0)
> >   * Rainier board (AST2600)
> > 
> > [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> > [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
> > 
> > Thanks,
> > 
> > C.
> > 
> > Cédric Le Goater (10):
> >    mtd: spi-nor: aspeed: Rename Kconfig option
> >    dt-bindings: spi: Add Aspeed SMC controllers device tree binding
> >    spi: spi-mem: Add driver for Aspeed SMC controllers
> >    spi: aspeed: Add support for direct mapping
> >    spi: aspeed: Adjust direct mapping to device size
> >    spi: aspeed: Workaround AST2500 limitations
> >    spi: aspeed: Add support for the AST2400 SPI controller
> >    spi: aspeed: Calibrate read timings
> >    ARM: dts: aspeed: Enable Dual SPI RX transfers
> >    spi: aspeed: Activate new spi-mem driver
> > 
> >   drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
> >   .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
> >   arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
> >   arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
> >   arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
> >   drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
> >   drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
> >   drivers/spi/Kconfig                           |   11 +
> >   drivers/spi/Makefile                          |    1 +
> >   9 files changed, 1369 insertions(+), 3 deletions(-)
> >   create mode 100644 drivers/spi/spi-aspeed-smc.c
> >   create mode 100644
> > Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
> > 
> > --
> > 2.34.1
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-02-25  5:29 ` Call for testing: spi-mem driver for Aspeed SMC controllers Joel Stanley
  2022-02-27 18:53   ` Cédric Le Goater
@ 2022-03-01  9:57   ` John Wang
  2022-03-01 10:25     ` Cédric Le Goater
  2022-03-01 12:20     ` Joel Stanley
  1 sibling, 2 replies; 27+ messages in thread
From: John Wang @ 2022-03-01  9:57 UTC (permalink / raw)
  To: Joel Stanley; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Cédric Le Goater

Joel Stanley <joel@jms.id.au> 于2022年2月25日周五 13:30写道:
>
> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> subsystem, which should mean it can go upstream.
>
> This is great news, as our current driver is half upstream, half in
> the openbmc tree, due to some issues getting it merged as part of the
> spi-nor subsystem.
>
> It would be great to have testing. I've created a commit that patches
> in support to whatever kernel tree you're using. Hopefully this makes
> it easier to test atop your internal branches:
>
> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551

tested on a fp5280g2 (ast2500), it looks okay.

root@fp5280g2:~# dmesg |grep spi
[    1.594677] spi-nor spi0.0: mx66l51235f (65536 Kbytes)
[    1.728194] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
[    1.992733] spi-nor spi1.0: mx66l51235f (65536 Kbytes)
[    2.211741] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
[    3.175017] SPI driver bmp280 has no spi_device_id for bosch,bmp085



>
> Cherry pick this commit into your tree, and see how it goes, and report back.
>
> I plan to switch the openbmc tree to this driver when we next rebase
> the kernel. We could also backport it to dev-5.15 as an option.
>
> You can direct testing results to this thread, or reply directly to
> the upstream thread:
>
> https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
>
> Cheers,
>
> Joel
>
> ---------- Forwarded message ---------
> From: Cédric Le Goater <clg@kaod.org>
> Date: Mon, 14 Feb 2022 at 09:42
> Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
>
>
> Hi,
>
> This series adds a new SPI driver using the spi-mem interface for the
> Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> SoCs.
>
>  * AST2600 Firmware SPI Memory Controller (FMC)
>  * AST2600 SPI Flash Controller (SPI1 and SPI2)
>  * AST2500 Firmware SPI Memory Controller (FMC)
>  * AST2500 SPI Flash Controller (SPI1 and SPI2)
>  * AST2400 New Static Memory Controller (also referred as FMC)
>  * AST2400 SPI Flash Controller (SPI)
>
> It is based on the current OpenBMC kernel driver [1], using directly
> the MTD SPI-NOR interface and on a patchset [2] previously proposed
> adding support for the AST2600 only. This driver takes a slightly
> different approach to cover all 6 controllers.
>
> It does not make use of the controller register disabling Address and
> Data byte lanes because is not available on the AST2400 SoC. We could
> introduce a specific handler for new features available on recent SoCs
> if needed. As there is not much difference on performance, the driver
> chooses the common denominator: "User mode" which has been heavily
> tested in [1]. "User mode" is also used as a fall back method when
> flash device mapping window is too small.
>
> Problems to address with spi-mem were the configuration of the mapping
> windows and the calibration of the read timings. The driver handles
> them in the direct mapping handler when some knowledge on the size of
> the flash device is know. It is not perfect but not incorrect either.
> The algorithm is one from [1] because it doesn't require the DMA
> registers which are not available on all controllers.
>
> Direct mapping for writes is not supported (yet). I have seen some
> corruption with writes and I preferred to use the safer and proven
> method of the initial driver [1]. We can improve that later.
>
> The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> didn't have the expected results. Therefore it is not activated yet.
> This needs more tests.
>
> The series does not remove the current Aspeed SMC driver but prepares
> ground for its removal by changing its CONFIG option. This last step
> can be addressed as a followup when the new driver using the spi-mem
> interface has been sufficiently exposed.
>
> Tested on:
>
>  * OpenPOWER Palmetto (AST2400)
>  * Evaluation board (AST2500)
>  * OpenPOWER Witherspoon (AST2500)
>  * Evaluation board (AST2600 A0)
>  * Rainier board (AST2600)
>
> [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
>
> Thanks,
>
> C.
>
> Cédric Le Goater (10):
>   mtd: spi-nor: aspeed: Rename Kconfig option
>   dt-bindings: spi: Add Aspeed SMC controllers device tree binding
>   spi: spi-mem: Add driver for Aspeed SMC controllers
>   spi: aspeed: Add support for direct mapping
>   spi: aspeed: Adjust direct mapping to device size
>   spi: aspeed: Workaround AST2500 limitations
>   spi: aspeed: Add support for the AST2400 SPI controller
>   spi: aspeed: Calibrate read timings
>   ARM: dts: aspeed: Enable Dual SPI RX transfers
>   spi: aspeed: Activate new spi-mem driver
>
>  drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
>  .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
>  arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
>  arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
>  arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
>  drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
>  drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
>  drivers/spi/Kconfig                           |   11 +
>  drivers/spi/Makefile                          |    1 +
>  9 files changed, 1369 insertions(+), 3 deletions(-)
>  create mode 100644 drivers/spi/spi-aspeed-smc.c
>  create mode 100644
> Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
>
> --
> 2.34.1

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-01  9:57   ` John Wang
@ 2022-03-01 10:25     ` Cédric Le Goater
  2022-03-02  2:47       ` John Wang
  2022-03-01 12:20     ` Joel Stanley
  1 sibling, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-01 10:25 UTC (permalink / raw)
  To: John Wang, Joel Stanley; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen

On 3/1/22 10:57, John Wang wrote:
> Joel Stanley <joel@jms.id.au> 于2022年2月25日周五 13:30写道:
>>
>> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
>> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
>> subsystem, which should mean it can go upstream.
>>
>> This is great news, as our current driver is half upstream, half in
>> the openbmc tree, due to some issues getting it merged as part of the
>> spi-nor subsystem.
>>
>> It would be great to have testing. I've created a commit that patches
>> in support to whatever kernel tree you're using. Hopefully this makes
>> it easier to test atop your internal branches:
>>
>> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> 
> tested on a fp5280g2 (ast2500), it looks okay.

Thanks !
  
> root@fp5280g2:~# dmesg |grep spi
> [    1.594677] spi-nor spi0.0: mx66l51235f (65536 Kbytes)
> [    1.728194] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [    1.992733] spi-nor spi1.0: mx66l51235f (65536 Kbytes)
> [    2.211741] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]

Training was done on both controllers. It's a little faster on SPI1 because
the clock is set at KCLK/2 whereas FMC uses HCLK/4. Dual IO 4B read command
is the default setting for both.

I test writing with :

     dd if=/dev/random of=$tmp bs=1M count=$count
     md5sum $tmp
     
     time flashcp -v $tmp $mtd  # ~3min for 32MB
     time md5sum $mtd # ~3s for 32MB

but not on /dev/mtd0 !

C.

> [    3.175017] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> 
> 
> 
>>
>> Cherry pick this commit into your tree, and see how it goes, and report back.
>>
>> I plan to switch the openbmc tree to this driver when we next rebase
>> the kernel. We could also backport it to dev-5.15 as an option.
>>
>> You can direct testing results to this thread, or reply directly to
>> the upstream thread:
>>
>> https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
>>
>> Cheers,
>>
>> Joel
>>
>> ---------- Forwarded message ---------
>> From: Cédric Le Goater <clg@kaod.org>
>> Date: Mon, 14 Feb 2022 at 09:42
>> Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
>> To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
>> Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
>> <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
>> Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
>> <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
>> <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
>> Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
>> <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
>> Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
>> <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
>>
>>
>> Hi,
>>
>> This series adds a new SPI driver using the spi-mem interface for the
>> Aspeed static memory controllers of the AST2600, AST2500 and AST2400
>> SoCs.
>>
>>   * AST2600 Firmware SPI Memory Controller (FMC)
>>   * AST2600 SPI Flash Controller (SPI1 and SPI2)
>>   * AST2500 Firmware SPI Memory Controller (FMC)
>>   * AST2500 SPI Flash Controller (SPI1 and SPI2)
>>   * AST2400 New Static Memory Controller (also referred as FMC)
>>   * AST2400 SPI Flash Controller (SPI)
>>
>> It is based on the current OpenBMC kernel driver [1], using directly
>> the MTD SPI-NOR interface and on a patchset [2] previously proposed
>> adding support for the AST2600 only. This driver takes a slightly
>> different approach to cover all 6 controllers.
>>
>> It does not make use of the controller register disabling Address and
>> Data byte lanes because is not available on the AST2400 SoC. We could
>> introduce a specific handler for new features available on recent SoCs
>> if needed. As there is not much difference on performance, the driver
>> chooses the common denominator: "User mode" which has been heavily
>> tested in [1]. "User mode" is also used as a fall back method when
>> flash device mapping window is too small.
>>
>> Problems to address with spi-mem were the configuration of the mapping
>> windows and the calibration of the read timings. The driver handles
>> them in the direct mapping handler when some knowledge on the size of
>> the flash device is know. It is not perfect but not incorrect either.
>> The algorithm is one from [1] because it doesn't require the DMA
>> registers which are not available on all controllers.
>>
>> Direct mapping for writes is not supported (yet). I have seen some
>> corruption with writes and I preferred to use the safer and proven
>> method of the initial driver [1]. We can improve that later.
>>
>> The driver supports Quad SPI RX transfers on the AST2600 SoC but it
>> didn't have the expected results. Therefore it is not activated yet.
>> This needs more tests.
>>
>> The series does not remove the current Aspeed SMC driver but prepares
>> ground for its removal by changing its CONFIG option. This last step
>> can be addressed as a followup when the new driver using the spi-mem
>> interface has been sufficiently exposed.
>>
>> Tested on:
>>
>>   * OpenPOWER Palmetto (AST2400)
>>   * Evaluation board (AST2500)
>>   * OpenPOWER Witherspoon (AST2500)
>>   * Evaluation board (AST2600 A0)
>>   * Rainier board (AST2600)
>>
>> [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
>> [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
>>
>> Thanks,
>>
>> C.
>>
>> Cédric Le Goater (10):
>>    mtd: spi-nor: aspeed: Rename Kconfig option
>>    dt-bindings: spi: Add Aspeed SMC controllers device tree binding
>>    spi: spi-mem: Add driver for Aspeed SMC controllers
>>    spi: aspeed: Add support for direct mapping
>>    spi: aspeed: Adjust direct mapping to device size
>>    spi: aspeed: Workaround AST2500 limitations
>>    spi: aspeed: Add support for the AST2400 SPI controller
>>    spi: aspeed: Calibrate read timings
>>    ARM: dts: aspeed: Enable Dual SPI RX transfers
>>    spi: aspeed: Activate new spi-mem driver
>>
>>   drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
>>   .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
>>   arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
>>   arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
>>   arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
>>   drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
>>   drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
>>   drivers/spi/Kconfig                           |   11 +
>>   drivers/spi/Makefile                          |    1 +
>>   9 files changed, 1369 insertions(+), 3 deletions(-)
>>   create mode 100644 drivers/spi/spi-aspeed-smc.c
>>   create mode 100644
>> Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
>>
>> --
>> 2.34.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-01  9:57   ` John Wang
  2022-03-01 10:25     ` Cédric Le Goater
@ 2022-03-01 12:20     ` Joel Stanley
  2022-03-02  2:28       ` [External] " Lei Yu
  2022-03-02  5:45       ` Cédric Le Goater
  1 sibling, 2 replies; 27+ messages in thread
From: Joel Stanley @ 2022-03-01 12:20 UTC (permalink / raw)
  To: John Wang; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Cédric Le Goater

On Tue, 1 Mar 2022 at 09:57, John Wang <wangzq.jn@gmail.com> wrote:
>
> Joel Stanley <joel@jms.id.au> 于2022年2月25日周五 13:30写道:
> >
> > Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> > SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> > subsystem, which should mean it can go upstream.
> >
> > This is great news, as our current driver is half upstream, half in
> > the openbmc tree, due to some issues getting it merged as part of the
> > spi-nor subsystem.
> >
> > It would be great to have testing. I've created a commit that patches
> > in support to whatever kernel tree you're using. Hopefully this makes
> > it easier to test atop your internal branches:
> >
> > https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
>
> tested on a fp5280g2 (ast2500), it looks okay.
>
> root@fp5280g2:~# dmesg |grep spi
> [    1.594677] spi-nor spi0.0: mx66l51235f (65536 Kbytes)
> [    1.728194] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [    1.992733] spi-nor spi1.0: mx66l51235f (65536 Kbytes)
> [    2.211741] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
> [    3.175017] SPI driver bmp280 has no spi_device_id for bosch,bmp085


I've also done some testing, this time on an AST2600A3 EVB.

I tried to enable quad spi by adjust the device tree:

--- a/arch/arm/boot/dts/aspeed-ast2600-evb.dts
+++ b/arch/arm/boot/dts/aspeed-ast2600-evb.dts
@@ -157,10 +157,13 @@ &rtc {
 };

 &fmc {
+     pinctrl-names = "default";
+     pinctrl-0 = <&pinctrl_fwqspid_default>;
        status = "okay";
        flash@0 {
                status = "okay";
                m25p,fast-read;
+               spi-rx-bus-width = <4>;
                label = "bmc";
                spi-max-frequency = <50000000>;


But the pinctrl setting failed with this error:

[    0.742963] aspeed-g6-pinctrl 1e6e2000.syscon:pinctrl: invalid
function FWQSPID in map table

So I removed the quad spi settings and re-tested:

[    0.746796] spi-nor spi0.0: w25q512jv (65536 Kbytes)
[    0.808104] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
[    0.862687] spi-nor spi0.1: w25q512jv (65536 Kbytes)
[    0.923991] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
[    0.937639] spi-nor spi1.0: w25q256 (32768 Kbytes)
[    1.062246] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
[    1.076507] spi-nor spi2.0: gd25q256 (32768 Kbytes)
[    1.173951] spi-aspeed-smc 1e631000.spi: CE0 read buswidth:2 [0x203c0741]

./mtd-stress.sh mtd5 mtd6 mtd7 mtd8


22+0 records in
22+0 records out
23068672 bytes (23 MB, 22 MiB) copied, 2.40148 s, 9.6 MB/s
14d980eb27e1b5d6554f22a71fc93de6  /tmp/tmp.CWpblJtRYl
Erasing blocks: 352/352 (100%)
Writing data: 22528k/22528k (100%)
Verifying data: 22528k/22528k (100%)

real    2m47.896s
user    0m0.080s
sys    2m46.984s
14d980eb27e1b5d6554f22a71fc93de6  /dev/mtd5

real    0m3.344s
user    0m0.166s
sys    0m3.101s


64+0 records in
64+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 5.38035 s, 12.5 MB/s
5b2a21e51a39f6c4e01c92b3c1b8825c  /tmp/tmp.BnJmqVrHHa
Erasing blocks: 1024/1024 (100%)
Writing data: 65536k/65536k (100%)
Verifying data: 65536k/65536k (100%)

real    7m40.625s
user    0m0.230s
sys    7m39.931s
5b2a21e51a39f6c4e01c92b3c1b8825c  /dev/mtd6

real    0m9.723s
user    0m0.484s
sys    0m9.110s


32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 2.4457 s, 13.7 MB/s
a3a343b1d4233e364d332a9b466a0a40  /tmp/tmp.4NsXyq09Km
Erasing blocks: 512/512 (100%)
Writing data: 32768k/32768k (100%)
Verifying data: 32768k/32768k (100%)

real    2m17.560s
user    0m0.100s
sys    2m17.346s
a3a343b1d4233e364d332a9b466a0a40  /dev/mtd7

real    0m3.598s
user    0m0.247s
sys    0m3.313s


32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 3.49483 s, 9.6 MB/s
fc65634b925e4655dd9db70972c1ed46  /tmp/tmp.MaXhJaz10l
Erasing blocks: 512/512 (100%)
Writing data: 32768k/32768k (100%)
Verifying data: 32768k/32768k (100%)

real    1m46.311s
user    0m0.130s
sys    1m46.064s
fc65634b925e4655dd9db70972c1ed46  /dev/mtd8

real    0m3.513s
user    0m0.246s
sys    0m3.219s



>
>
>
> >
> > Cherry pick this commit into your tree, and see how it goes, and report back.
> >
> > I plan to switch the openbmc tree to this driver when we next rebase
> > the kernel. We could also backport it to dev-5.15 as an option.
> >
> > You can direct testing results to this thread, or reply directly to
> > the upstream thread:
> >
> > https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
> >
> > Cheers,
> >
> > Joel
> >
> > ---------- Forwarded message ---------
> > From: Cédric Le Goater <clg@kaod.org>
> > Date: Mon, 14 Feb 2022 at 09:42
> > Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> > To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> > Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> > <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> > Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> > <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> > <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> > Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> > <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> > Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> > <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
> >
> >
> > Hi,
> >
> > This series adds a new SPI driver using the spi-mem interface for the
> > Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> > SoCs.
> >
> >  * AST2600 Firmware SPI Memory Controller (FMC)
> >  * AST2600 SPI Flash Controller (SPI1 and SPI2)
> >  * AST2500 Firmware SPI Memory Controller (FMC)
> >  * AST2500 SPI Flash Controller (SPI1 and SPI2)
> >  * AST2400 New Static Memory Controller (also referred as FMC)
> >  * AST2400 SPI Flash Controller (SPI)
> >
> > It is based on the current OpenBMC kernel driver [1], using directly
> > the MTD SPI-NOR interface and on a patchset [2] previously proposed
> > adding support for the AST2600 only. This driver takes a slightly
> > different approach to cover all 6 controllers.
> >
> > It does not make use of the controller register disabling Address and
> > Data byte lanes because is not available on the AST2400 SoC. We could
> > introduce a specific handler for new features available on recent SoCs
> > if needed. As there is not much difference on performance, the driver
> > chooses the common denominator: "User mode" which has been heavily
> > tested in [1]. "User mode" is also used as a fall back method when
> > flash device mapping window is too small.
> >
> > Problems to address with spi-mem were the configuration of the mapping
> > windows and the calibration of the read timings. The driver handles
> > them in the direct mapping handler when some knowledge on the size of
> > the flash device is know. It is not perfect but not incorrect either.
> > The algorithm is one from [1] because it doesn't require the DMA
> > registers which are not available on all controllers.
> >
> > Direct mapping for writes is not supported (yet). I have seen some
> > corruption with writes and I preferred to use the safer and proven
> > method of the initial driver [1]. We can improve that later.
> >
> > The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> > didn't have the expected results. Therefore it is not activated yet.
> > This needs more tests.
> >
> > The series does not remove the current Aspeed SMC driver but prepares
> > ground for its removal by changing its CONFIG option. This last step
> > can be addressed as a followup when the new driver using the spi-mem
> > interface has been sufficiently exposed.
> >
> > Tested on:
> >
> >  * OpenPOWER Palmetto (AST2400)
> >  * Evaluation board (AST2500)
> >  * OpenPOWER Witherspoon (AST2500)
> >  * Evaluation board (AST2600 A0)
> >  * Rainier board (AST2600)
> >
> > [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> > [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
> >
> > Thanks,
> >
> > C.
> >
> > Cédric Le Goater (10):
> >   mtd: spi-nor: aspeed: Rename Kconfig option
> >   dt-bindings: spi: Add Aspeed SMC controllers device tree binding
> >   spi: spi-mem: Add driver for Aspeed SMC controllers
> >   spi: aspeed: Add support for direct mapping
> >   spi: aspeed: Adjust direct mapping to device size
> >   spi: aspeed: Workaround AST2500 limitations
> >   spi: aspeed: Add support for the AST2400 SPI controller
> >   spi: aspeed: Calibrate read timings
> >   ARM: dts: aspeed: Enable Dual SPI RX transfers
> >   spi: aspeed: Activate new spi-mem driver
> >
> >  drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
> >  .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
> >  arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
> >  arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
> >  arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
> >  drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
> >  drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
> >  drivers/spi/Kconfig                           |   11 +
> >  drivers/spi/Makefile                          |    1 +
> >  9 files changed, 1369 insertions(+), 3 deletions(-)
> >  create mode 100644 drivers/spi/spi-aspeed-smc.c
> >  create mode 100644
> > Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
> >
> > --
> > 2.34.1

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [External] Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-01 12:20     ` Joel Stanley
@ 2022-03-02  2:28       ` Lei Yu
  2022-03-07  9:41         ` Lei Yu
  2022-03-02  5:45       ` Cédric Le Goater
  1 sibling, 1 reply; 27+ messages in thread
From: Lei Yu @ 2022-03-02  2:28 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Ryan Chen, OpenBMC Maillist, John Wang, Cédric Le Goater

> I tried to enable quad spi by adjust the device tree:
>
> --- a/arch/arm/boot/dts/aspeed-ast2600-evb.dts
> +++ b/arch/arm/boot/dts/aspeed-ast2600-evb.dts
> @@ -157,10 +157,13 @@ &rtc {
>  };
>
>  &fmc {
> +     pinctrl-names = "default";
> +     pinctrl-0 = <&pinctrl_fwqspid_default>;

We had similar issue, for QSPI it needs to pick FWQSPI related changes
from aspeed-sdk's tree:
https://github.com/AspeedTech-BMC/linux/blob/aspeed-master-v5.15/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c#L1322

And with the updated dtsi:
https://github.com/AspeedTech-BMC/linux/blob/aspeed-master-v5.15/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi#L120

And with the machine dts:
    pinctrl-0 = <&pinctrl_fwqspi_default>;

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-01 10:25     ` Cédric Le Goater
@ 2022-03-02  2:47       ` John Wang
  0 siblings, 0 replies; 27+ messages in thread
From: John Wang @ 2022-03-02  2:47 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Cédric Le Goater <clg@kaod.org> 于2022年3月1日周二 18:25写道:
>
> On 3/1/22 10:57, John Wang wrote:
> > Joel Stanley <joel@jms.id.au> 于2022年2月25日周五 13:30写道:
> >>
> >> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> >> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> >> subsystem, which should mean it can go upstream.
> >>
> >> This is great news, as our current driver is half upstream, half in
> >> the openbmc tree, due to some issues getting it merged as part of the
> >> spi-nor subsystem.
> >>
> >> It would be great to have testing. I've created a commit that patches
> >> in support to whatever kernel tree you're using. Hopefully this makes
> >> it easier to test atop your internal branches:
> >>
> >> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> >
> > tested on a fp5280g2 (ast2500), it looks okay.
>
> Thanks !
>
> > root@fp5280g2:~# dmesg |grep spi
> > [    1.594677] spi-nor spi0.0: mx66l51235f (65536 Kbytes)
> > [    1.728194] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> > [    1.992733] spi-nor spi1.0: mx66l51235f (65536 Kbytes)
> > [    2.211741] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
>
> Training was done on both controllers. It's a little faster on SPI1 because
> the clock is set at KCLK/2 whereas FMC uses HCLK/4. Dual IO 4B read command
> is the default setting for both.
>
> I test writing with :
>
>      dd if=/dev/random of=$tmp bs=1M count=$count
>      md5sum $tmp
>
>      time flashcp -v $tmp $mtd  # ~3min for 32MB
>      time md5sum $mtd # ~3s for 32MB
>
> but not on /dev/mtd0 !
>

test writing on a 2500 :)

root@fp5280g2:/tmp# time dd if=/dev/random of=/tmp/test bs=1M count=32
32+0 records in
32+0 records out

real 0m3.144s
user 0m0.002s
sys 0m2.278s
root@fp5280g2:/tmp# md5sum /tmp/test
bed6912a0b257cb7acb79f1c7f99cf6e  /tmp/test

root@fp5280g2:/tmp# time flashcp -v /tmp/test /dev/mtd4  # 32M
Erasing block: 512/512 (100%)
Writing kb: 32768/32768 (100%)
Verifying kb: 32768/32768 (100%)

real 4m12.713s
user 0m1.878s
sys 2m42.690s
root@fp5280g2:/tmp# time md5sum /dev/mtd4
bed6912a0b257cb7acb79f1c7f99cf6e  /dev/mtd4

real 0m7.668s
user 0m0.832s
sys 0m3.524s

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-01 12:20     ` Joel Stanley
  2022-03-02  2:28       ` [External] " Lei Yu
@ 2022-03-02  5:45       ` Cédric Le Goater
  2022-03-03  9:45         ` Joel Stanley
  1 sibling, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-02  5:45 UTC (permalink / raw)
  To: Joel Stanley, John Wang; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen

On 3/1/22 13:20, Joel Stanley wrote:
> On Tue, 1 Mar 2022 at 09:57, John Wang <wangzq.jn@gmail.com> wrote:
>>
>> Joel Stanley <joel@jms.id.au> 于2022年2月25日周五 13:30写道:
>>>
>>> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
>>> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
>>> subsystem, which should mean it can go upstream.
>>>
>>> This is great news, as our current driver is half upstream, half in
>>> the openbmc tree, due to some issues getting it merged as part of the
>>> spi-nor subsystem.
>>>
>>> It would be great to have testing. I've created a commit that patches
>>> in support to whatever kernel tree you're using. Hopefully this makes
>>> it easier to test atop your internal branches:
>>>
>>> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
>>
>> tested on a fp5280g2 (ast2500), it looks okay.
>>
>> root@fp5280g2:~# dmesg |grep spi
>> [    1.594677] spi-nor spi0.0: mx66l51235f (65536 Kbytes)
>> [    1.728194] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
>> [    1.992733] spi-nor spi1.0: mx66l51235f (65536 Kbytes)
>> [    2.211741] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
>> [    3.175017] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> 
> 
> I've also done some testing, this time on an AST2600A3 EVB.
> 
> I tried to enable quad spi by adjust the device tree:
> 
> --- a/arch/arm/boot/dts/aspeed-ast2600-evb.dts
> +++ b/arch/arm/boot/dts/aspeed-ast2600-evb.dts
> @@ -157,10 +157,13 @@ &rtc {
>   };
> 
>   &fmc {
> +     pinctrl-names = "default";
> +     pinctrl-0 = <&pinctrl_fwqspid_default>;
>          status = "okay";
>          flash@0 {
>                  status = "okay";
>                  m25p,fast-read;
> +               spi-rx-bus-width = <4>;
>                  label = "bmc";
>                  spi-max-frequency = <50000000>;
> 
> 
> But the pinctrl setting failed with this error:
> 
> [    0.742963] aspeed-g6-pinctrl 1e6e2000.syscon:pinctrl: invalid
> function FWQSPID in map table
> 
> So I removed the quad spi settings and re-tested:
> 
> [    0.746796] spi-nor spi0.0: w25q512jv (65536 Kbytes)
> [    0.808104] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [    0.862687] spi-nor spi0.1: w25q512jv (65536 Kbytes)
> [    0.923991] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]


On the FMC controller, could you please increase the clock to :

	spi-max-frequency = <100000000>;

and check the results ?

> [    0.937639] spi-nor spi1.0: w25q256 (32768 Kbytes)
> [    1.062246] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
> [    1.076507] spi-nor spi2.0: gd25q256 (32768 Kbytes)
> [    1.173951] spi-aspeed-smc 1e631000.spi: CE0 read buswidth:2 [0x203c0741]
> 
> ./mtd-stress.sh mtd5 mtd6 mtd7 mtd8

A good test would be to read from /dev/mtd0 and reflash the resulting file.
Keep an external programmer close at hand just in case :)

Thanks for these tests Joel,

C.


> 22+0 records in
> 22+0 records out
> 23068672 bytes (23 MB, 22 MiB) copied, 2.40148 s, 9.6 MB/s
> 14d980eb27e1b5d6554f22a71fc93de6  /tmp/tmp.CWpblJtRYl
> Erasing blocks: 352/352 (100%)
> Writing data: 22528k/22528k (100%)
> Verifying data: 22528k/22528k (100%)
> 
> real    2m47.896s
> user    0m0.080s
> sys    2m46.984s
> 14d980eb27e1b5d6554f22a71fc93de6  /dev/mtd5
> 
> real    0m3.344s
> user    0m0.166s
> sys    0m3.101s
> 
> 
> 64+0 records in
> 64+0 records out
> 67108864 bytes (67 MB, 64 MiB) copied, 5.38035 s, 12.5 MB/s
> 5b2a21e51a39f6c4e01c92b3c1b8825c  /tmp/tmp.BnJmqVrHHa
> Erasing blocks: 1024/1024 (100%)
> Writing data: 65536k/65536k (100%)
> Verifying data: 65536k/65536k (100%)
> 
> real    7m40.625s
> user    0m0.230s
> sys    7m39.931s
> 5b2a21e51a39f6c4e01c92b3c1b8825c  /dev/mtd6
> 
> real    0m9.723s
> user    0m0.484s
> sys    0m9.110s
> 
> 
> 32+0 records in
> 32+0 records out
> 33554432 bytes (34 MB, 32 MiB) copied, 2.4457 s, 13.7 MB/s
> a3a343b1d4233e364d332a9b466a0a40  /tmp/tmp.4NsXyq09Km
> Erasing blocks: 512/512 (100%)
> Writing data: 32768k/32768k (100%)
> Verifying data: 32768k/32768k (100%)
> 
> real    2m17.560s
> user    0m0.100s
> sys    2m17.346s
> a3a343b1d4233e364d332a9b466a0a40  /dev/mtd7
> 
> real    0m3.598s
> user    0m0.247s
> sys    0m3.313s
> 
> 
> 32+0 records in
> 32+0 records out
> 33554432 bytes (34 MB, 32 MiB) copied, 3.49483 s, 9.6 MB/s
> fc65634b925e4655dd9db70972c1ed46  /tmp/tmp.MaXhJaz10l
> Erasing blocks: 512/512 (100%)
> Writing data: 32768k/32768k (100%)
> Verifying data: 32768k/32768k (100%)
> 
> real    1m46.311s
> user    0m0.130s
> sys    1m46.064s
> fc65634b925e4655dd9db70972c1ed46  /dev/mtd8
> 
> real    0m3.513s
> user    0m0.246s
> sys    0m3.219s



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-02-27 18:53   ` Cédric Le Goater
  2022-02-28  6:30     ` Tao Ren
@ 2022-03-02  6:05     ` Tao Ren
  2022-03-02  6:23       ` Cédric Le Goater
  1 sibling, 1 reply; 27+ messages in thread
From: Tao Ren @ 2022-03-02  6:05 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Hi Cedric,

I tested v2 on wedge100 (ast2400) and cmm (ast2500). I don't see any
functional failures except below warning on ast2400. Is it something we
should worry about?

> spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow

The v2 patch series (10 patches) were applied to linux stable 5.15.25,
and below are the outputs on wedge100 (ast2400):

root@wedge100-bmc:~# dmesg | grep -i spi
[   11.479736] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
[   11.704313] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
[   11.785842] 5 fixed-partitions partitions found on MTD device spi0.0
[   11.862033] Creating 5 MTD partitions on "spi0.0":
[   13.039009] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
[   13.107056] spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
[   13.190551] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0041]
[   13.271959] 1 fixed-partitions partitions found on MTD device spi0.1
[   13.348097] Creating 1 MTD partitions on "spi0.1":
[   28.169886] SPI driver bmp280 has no spi_device_id for bosch,bmp085
root@wedge100-bmc:/tmp# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00060000 00010000 "u-boot"
mtd1: 00020000 00010000 "env"
mtd2: 01b80000 00010000 "fit"
mtd3: 00400000 00010000 "data0"
mtd4: 02000000 00010000 "flash0"
mtd5: 02000000 00010000 "flash1"
root@wedge100-bmc:/tmp# ls -l flash-wedge100
-rw-r--r--    1 root     root      22867574 Mar  1 20:49 flash-wedge100
root@wedge100-bmc:/tmp# time flashcp flash-wedge100 /dev/mtd4

real    2m22.860s
user    0m0.478s
sys     2m10.647s
root@wedge100-bmc:/tmp# ls -l flash-wedge100.v2021.13.1
-rw-r--r--    1 root     root      19743390 Mar  1 10:10 flash-wedge100.v2021.13.1
root@wedge100-bmc:/tmp# time flashcp flash-wedge100.v2021.13.1 /dev/mtd5

real    2m23.144s
user    0m0.409s
sys     2m10.526s

And here are the outpus on cmm (ast2500):

root@cmm001-oob:~# dmesg | grep -i spi
[   15.172879] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
[   15.361516] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
[   15.442978] 5 fixed-partitions partitions found on MTD device spi0.0
[   15.519145] Creating 5 MTD partitions on "spi0.0":
[   15.883123] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
[   16.071286] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
[   16.152711] 1 fixed-partitions partitions found on MTD device spi0.1
[   16.228830] Creating 1 MTD partitions on "spi0.1":
[   63.831721] SPI driver bmp280 has no spi_device_id for bosch,bmp085
root@cmm001-oob:/tmp# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00060000 00001000 "u-boot"
mtd1: 00020000 00001000 "env"
mtd2: 01b80000 00001000 "fit"
mtd3: 00400000 00001000 "data0"
mtd4: 02000000 00001000 "flash0"
mtd5: 02000000 00001000 "flash1"
root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm
-rw-r--r--    1 root     root      23772278 Mar  1 21:04 /tmp/flash-cmm
root@cmm001-oob:/tmp# time flashcp /tmp/flash-cmm /dev/mtd4
real    3m37.154s
user    0m0.260s
sys     3m31.700s
root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm.v2021.48.0
-rw-r--r--    1 root     root      23723958 Mar  1 21:07 /tmp/flash-cmm.v2021.48.0
root@cmm001-oob:/tmp# time flashcp flash-cmm.v2021.48.0 /dev/mtd5

real    3m33.843s
user    0m0.458s
sys     3m28.216s


Cheers,

Tao

On Sun, Feb 27, 2022 at 07:53:37PM +0100, Cédric Le Goater wrote:
> On 2/25/22 06:29, Joel Stanley wrote:
> > Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> > SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> > subsystem, which should mean it can go upstream.
> > 
> > This is great news, as our current driver is half upstream, half in
> > the openbmc tree, due to some issues getting it merged as part of the
> > spi-nor subsystem.
> > 
> > It would be great to have testing. I've created a commit that patches
> > in support to whatever kernel tree you're using. Hopefully this makes
> > it easier to test atop your internal branches:
> > 
> > https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> > 
> > Cherry pick this commit into your tree, and see how it goes, and report back.
> > 
> > I plan to switch the openbmc tree to this driver when we next rebase
> > the kernel. We could also backport it to dev-5.15 as an option.
> > 
> > You can direct testing results to this thread, or reply directly to
> > the upstream thread:
> > 
> > https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
> 
> or grab the v2 from :
> 
>   https://github.com/legoater/linux/tree/openbmc-5.15
> 
> I have addressed the comments on driver bind/unbind.
> 
> Thanks,
> 
> C.
> 
> > 
> > Cheers,
> > 
> > Joel
> > 
> > ---------- Forwarded message ---------
> > From: Cédric Le Goater <clg@kaod.org>
> > Date: Mon, 14 Feb 2022 at 09:42
> > Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> > To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> > Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> > <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> > Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> > <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> > <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> > Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> > <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> > Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> > <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
> > 
> > 
> > Hi,
> > 
> > This series adds a new SPI driver using the spi-mem interface for the
> > Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> > SoCs.
> > 
> >   * AST2600 Firmware SPI Memory Controller (FMC)
> >   * AST2600 SPI Flash Controller (SPI1 and SPI2)
> >   * AST2500 Firmware SPI Memory Controller (FMC)
> >   * AST2500 SPI Flash Controller (SPI1 and SPI2)
> >   * AST2400 New Static Memory Controller (also referred as FMC)
> >   * AST2400 SPI Flash Controller (SPI)
> > 
> > It is based on the current OpenBMC kernel driver [1], using directly
> > the MTD SPI-NOR interface and on a patchset [2] previously proposed
> > adding support for the AST2600 only. This driver takes a slightly
> > different approach to cover all 6 controllers.
> > 
> > It does not make use of the controller register disabling Address and
> > Data byte lanes because is not available on the AST2400 SoC. We could
> > introduce a specific handler for new features available on recent SoCs
> > if needed. As there is not much difference on performance, the driver
> > chooses the common denominator: "User mode" which has been heavily
> > tested in [1]. "User mode" is also used as a fall back method when
> > flash device mapping window is too small.
> > 
> > Problems to address with spi-mem were the configuration of the mapping
> > windows and the calibration of the read timings. The driver handles
> > them in the direct mapping handler when some knowledge on the size of
> > the flash device is know. It is not perfect but not incorrect either.
> > The algorithm is one from [1] because it doesn't require the DMA
> > registers which are not available on all controllers.
> > 
> > Direct mapping for writes is not supported (yet). I have seen some
> > corruption with writes and I preferred to use the safer and proven
> > method of the initial driver [1]. We can improve that later.
> > 
> > The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> > didn't have the expected results. Therefore it is not activated yet.
> > This needs more tests.
> > 
> > The series does not remove the current Aspeed SMC driver but prepares
> > ground for its removal by changing its CONFIG option. This last step
> > can be addressed as a followup when the new driver using the spi-mem
> > interface has been sufficiently exposed.
> > 
> > Tested on:
> > 
> >   * OpenPOWER Palmetto (AST2400)
> >   * Evaluation board (AST2500)
> >   * OpenPOWER Witherspoon (AST2500)
> >   * Evaluation board (AST2600 A0)
> >   * Rainier board (AST2600)
> > 
> > [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> > [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
> > 
> > Thanks,
> > 
> > C.
> > 
> > Cédric Le Goater (10):
> >    mtd: spi-nor: aspeed: Rename Kconfig option
> >    dt-bindings: spi: Add Aspeed SMC controllers device tree binding
> >    spi: spi-mem: Add driver for Aspeed SMC controllers
> >    spi: aspeed: Add support for direct mapping
> >    spi: aspeed: Adjust direct mapping to device size
> >    spi: aspeed: Workaround AST2500 limitations
> >    spi: aspeed: Add support for the AST2400 SPI controller
> >    spi: aspeed: Calibrate read timings
> >    ARM: dts: aspeed: Enable Dual SPI RX transfers
> >    spi: aspeed: Activate new spi-mem driver
> > 
> >   drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
> >   .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
> >   arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
> >   arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
> >   arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
> >   drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
> >   drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
> >   drivers/spi/Kconfig                           |   11 +
> >   drivers/spi/Makefile                          |    1 +
> >   9 files changed, 1369 insertions(+), 3 deletions(-)
> >   create mode 100644 drivers/spi/spi-aspeed-smc.c
> >   create mode 100644
> > Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
> > 
> > --
> > 2.34.1
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-02  6:05     ` Tao Ren
@ 2022-03-02  6:23       ` Cédric Le Goater
  2022-03-02  6:47         ` Tao Ren
  2022-03-03  6:03         ` Tao Ren
  0 siblings, 2 replies; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-02  6:23 UTC (permalink / raw)
  To: Tao Ren; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Hello Tao,

On 3/2/22 07:05, Tao Ren wrote:
> Hi Cedric,
> 
> I tested v2 on wedge100 (ast2400) and cmm (ast2500). I don't see any
> functional failures except below warning on ast2400. 

Thanks for the tests

> Is it something we should worry about?
> 
>> spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow


This means that the training failed for all HCLK settings. We never had
an AST2400 board with a second device on the FMC controller but we noticed
that any freq setting above 50MHz was unstable.

Also, aspeed-g4.dtsi does not have any "spi-max-frequency" for flash@1.
This needs an update.

> The v2 patch series (10 patches) were applied to linux stable 5.15.25,
> and below are the outputs on wedge100 (ast2400):
> 
> root@wedge100-bmc:~# dmesg | grep -i spi
> [   11.479736] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> [   11.704313] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [   11.785842] 5 fixed-partitions partitions found on MTD device spi0.0
> [   11.862033] Creating 5 MTD partitions on "spi0.0":
> [   13.039009] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> [   13.107056] spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
> [   13.190551] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0041]
> [   13.271959] 1 fixed-partitions partitions found on MTD device spi0.1
> [   13.348097] Creating 1 MTD partitions on "spi0.1":

Curious. The device seems alive and very slow.

Could you please add "dyndbg="file drivers/spi/* +p;" to the bootargs
and reboot ?


> [   28.169886] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> root@wedge100-bmc:/tmp# cat /proc/mtd
> dev:    size   erasesize  name
> mtd0: 00060000 00010000 "u-boot"
> mtd1: 00020000 00010000 "env"
> mtd2: 01b80000 00010000 "fit"
> mtd3: 00400000 00010000 "data0"
> mtd4: 02000000 00010000 "flash0"
> mtd5: 02000000 00010000 "flash1"
> root@wedge100-bmc:/tmp# ls -l flash-wedge100
> -rw-r--r--    1 root     root      22867574 Mar  1 20:49 flash-wedge100
> root@wedge100-bmc:/tmp# time flashcp flash-wedge100 /dev/mtd4
> 
> real    2m22.860s
> user    0m0.478s
> sys     2m10.647s
> root@wedge100-bmc:/tmp# ls -l flash-wedge100.v2021.13.1
> -rw-r--r--    1 root     root      19743390 Mar  1 10:10 flash-wedge100.v2021.13.1
> root@wedge100-bmc:/tmp# time flashcp flash-wedge100.v2021.13.1 /dev/mtd5
> 
> real    2m23.144s
> user    0m0.409s
> sys     2m10.526s

Since spi0.1 seems to be really slow, could you run

   time mdsum /dev/mtd5

and compare with flash-wedge100.v2021.13.1 ? But please update
"spi-max-frequency" in the DT first.

Thanks,

C.

> 
> And here are the outpus on cmm (ast2500):
> 
> root@cmm001-oob:~# dmesg | grep -i spi
> [   15.172879] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> [   15.361516] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [   15.442978] 5 fixed-partitions partitions found on MTD device spi0.0
> [   15.519145] Creating 5 MTD partitions on "spi0.0":
> [   15.883123] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> [   16.071286] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
> [   16.152711] 1 fixed-partitions partitions found on MTD device spi0.1
> [   16.228830] Creating 1 MTD partitions on "spi0.1":
> [   63.831721] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> root@cmm001-oob:/tmp# cat /proc/mtd
> dev:    size   erasesize  name
> mtd0: 00060000 00001000 "u-boot"
> mtd1: 00020000 00001000 "env"
> mtd2: 01b80000 00001000 "fit"
> mtd3: 00400000 00001000 "data0"
> mtd4: 02000000 00001000 "flash0"
> mtd5: 02000000 00001000 "flash1"
> root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm
> -rw-r--r--    1 root     root      23772278 Mar  1 21:04 /tmp/flash-cmm
> root@cmm001-oob:/tmp# time flashcp /tmp/flash-cmm /dev/mtd4
> real    3m37.154s
> user    0m0.260s
> sys     3m31.700s
> root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm.v2021.48.0
> -rw-r--r--    1 root     root      23723958 Mar  1 21:07 /tmp/flash-cmm.v2021.48.0
> root@cmm001-oob:/tmp# time flashcp flash-cmm.v2021.48.0 /dev/mtd5
> 
> real    3m33.843s
> user    0m0.458s
> sys     3m28.216s
> 
> 
> Cheers,
> 
> Tao
> 
> On Sun, Feb 27, 2022 at 07:53:37PM +0100, Cédric Le Goater wrote:
>> On 2/25/22 06:29, Joel Stanley wrote:
>>> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
>>> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
>>> subsystem, which should mean it can go upstream.
>>>
>>> This is great news, as our current driver is half upstream, half in
>>> the openbmc tree, due to some issues getting it merged as part of the
>>> spi-nor subsystem.
>>>
>>> It would be great to have testing. I've created a commit that patches
>>> in support to whatever kernel tree you're using. Hopefully this makes
>>> it easier to test atop your internal branches:
>>>
>>> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
>>>
>>> Cherry pick this commit into your tree, and see how it goes, and report back.
>>>
>>> I plan to switch the openbmc tree to this driver when we next rebase
>>> the kernel. We could also backport it to dev-5.15 as an option.
>>>
>>> You can direct testing results to this thread, or reply directly to
>>> the upstream thread:
>>>
>>> https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
>>
>> or grab the v2 from :
>>
>>    https://github.com/legoater/linux/tree/openbmc-5.15
>>
>> I have addressed the comments on driver bind/unbind.
>>
>> Thanks,
>>
>> C.
>>
>>>
>>> Cheers,
>>>
>>> Joel
>>>
>>> ---------- Forwarded message ---------
>>> From: Cédric Le Goater <clg@kaod.org>
>>> Date: Mon, 14 Feb 2022 at 09:42
>>> Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
>>> To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
>>> Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
>>> <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
>>> Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
>>> <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
>>> <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
>>> Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
>>> <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
>>> Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
>>> <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
>>>
>>>
>>> Hi,
>>>
>>> This series adds a new SPI driver using the spi-mem interface for the
>>> Aspeed static memory controllers of the AST2600, AST2500 and AST2400
>>> SoCs.
>>>
>>>    * AST2600 Firmware SPI Memory Controller (FMC)
>>>    * AST2600 SPI Flash Controller (SPI1 and SPI2)
>>>    * AST2500 Firmware SPI Memory Controller (FMC)
>>>    * AST2500 SPI Flash Controller (SPI1 and SPI2)
>>>    * AST2400 New Static Memory Controller (also referred as FMC)
>>>    * AST2400 SPI Flash Controller (SPI)
>>>
>>> It is based on the current OpenBMC kernel driver [1], using directly
>>> the MTD SPI-NOR interface and on a patchset [2] previously proposed
>>> adding support for the AST2600 only. This driver takes a slightly
>>> different approach to cover all 6 controllers.
>>>
>>> It does not make use of the controller register disabling Address and
>>> Data byte lanes because is not available on the AST2400 SoC. We could
>>> introduce a specific handler for new features available on recent SoCs
>>> if needed. As there is not much difference on performance, the driver
>>> chooses the common denominator: "User mode" which has been heavily
>>> tested in [1]. "User mode" is also used as a fall back method when
>>> flash device mapping window is too small.
>>>
>>> Problems to address with spi-mem were the configuration of the mapping
>>> windows and the calibration of the read timings. The driver handles
>>> them in the direct mapping handler when some knowledge on the size of
>>> the flash device is know. It is not perfect but not incorrect either.
>>> The algorithm is one from [1] because it doesn't require the DMA
>>> registers which are not available on all controllers.
>>>
>>> Direct mapping for writes is not supported (yet). I have seen some
>>> corruption with writes and I preferred to use the safer and proven
>>> method of the initial driver [1]. We can improve that later.
>>>
>>> The driver supports Quad SPI RX transfers on the AST2600 SoC but it
>>> didn't have the expected results. Therefore it is not activated yet.
>>> This needs more tests.
>>>
>>> The series does not remove the current Aspeed SMC driver but prepares
>>> ground for its removal by changing its CONFIG option. This last step
>>> can be addressed as a followup when the new driver using the spi-mem
>>> interface has been sufficiently exposed.
>>>
>>> Tested on:
>>>
>>>    * OpenPOWER Palmetto (AST2400)
>>>    * Evaluation board (AST2500)
>>>    * OpenPOWER Witherspoon (AST2500)
>>>    * Evaluation board (AST2600 A0)
>>>    * Rainier board (AST2600)
>>>
>>> [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
>>> [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
>>>
>>> Thanks,
>>>
>>> C.
>>>
>>> Cédric Le Goater (10):
>>>     mtd: spi-nor: aspeed: Rename Kconfig option
>>>     dt-bindings: spi: Add Aspeed SMC controllers device tree binding
>>>     spi: spi-mem: Add driver for Aspeed SMC controllers
>>>     spi: aspeed: Add support for direct mapping
>>>     spi: aspeed: Adjust direct mapping to device size
>>>     spi: aspeed: Workaround AST2500 limitations
>>>     spi: aspeed: Add support for the AST2400 SPI controller
>>>     spi: aspeed: Calibrate read timings
>>>     ARM: dts: aspeed: Enable Dual SPI RX transfers
>>>     spi: aspeed: Activate new spi-mem driver
>>>
>>>    drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
>>>    .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
>>>    arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
>>>    arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
>>>    arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
>>>    drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
>>>    drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
>>>    drivers/spi/Kconfig                           |   11 +
>>>    drivers/spi/Makefile                          |    1 +
>>>    9 files changed, 1369 insertions(+), 3 deletions(-)
>>>    create mode 100644 drivers/spi/spi-aspeed-smc.c
>>>    create mode 100644
>>> Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
>>>
>>> --
>>> 2.34.1
>>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-02  6:23       ` Cédric Le Goater
@ 2022-03-02  6:47         ` Tao Ren
  2022-03-03  6:03         ` Tao Ren
  1 sibling, 0 replies; 27+ messages in thread
From: Tao Ren @ 2022-03-02  6:47 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Hi Cedric,

Sure. Let me make the changes and will share you the results tomorrow.


Cheers,

Tao

On Wed, Mar 02, 2022 at 07:23:15AM +0100, Cédric Le Goater wrote:
> Hello Tao,
> 
> On 3/2/22 07:05, Tao Ren wrote:
> > Hi Cedric,
> > 
> > I tested v2 on wedge100 (ast2400) and cmm (ast2500). I don't see any
> > functional failures except below warning on ast2400.
> 
> Thanks for the tests
> 
> > Is it something we should worry about?
> > 
> > > spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
> 
> 
> This means that the training failed for all HCLK settings. We never had
> an AST2400 board with a second device on the FMC controller but we noticed
> that any freq setting above 50MHz was unstable.
> 
> Also, aspeed-g4.dtsi does not have any "spi-max-frequency" for flash@1.
> This needs an update.
> 
> > The v2 patch series (10 patches) were applied to linux stable 5.15.25,
> > and below are the outputs on wedge100 (ast2400):
> > 
> > root@wedge100-bmc:~# dmesg | grep -i spi
> > [   11.479736] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> > [   11.704313] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> > [   11.785842] 5 fixed-partitions partitions found on MTD device spi0.0
> > [   11.862033] Creating 5 MTD partitions on "spi0.0":
> > [   13.039009] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> > [   13.107056] spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
> > [   13.190551] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0041]
> > [   13.271959] 1 fixed-partitions partitions found on MTD device spi0.1
> > [   13.348097] Creating 1 MTD partitions on "spi0.1":
> 
> Curious. The device seems alive and very slow.
> 
> Could you please add "dyndbg="file drivers/spi/* +p;" to the bootargs
> and reboot ?
> 
> 
> > [   28.169886] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> > root@wedge100-bmc:/tmp# cat /proc/mtd
> > dev:    size   erasesize  name
> > mtd0: 00060000 00010000 "u-boot"
> > mtd1: 00020000 00010000 "env"
> > mtd2: 01b80000 00010000 "fit"
> > mtd3: 00400000 00010000 "data0"
> > mtd4: 02000000 00010000 "flash0"
> > mtd5: 02000000 00010000 "flash1"
> > root@wedge100-bmc:/tmp# ls -l flash-wedge100
> > -rw-r--r--    1 root     root      22867574 Mar  1 20:49 flash-wedge100
> > root@wedge100-bmc:/tmp# time flashcp flash-wedge100 /dev/mtd4
> > 
> > real    2m22.860s
> > user    0m0.478s
> > sys     2m10.647s
> > root@wedge100-bmc:/tmp# ls -l flash-wedge100.v2021.13.1
> > -rw-r--r--    1 root     root      19743390 Mar  1 10:10 flash-wedge100.v2021.13.1
> > root@wedge100-bmc:/tmp# time flashcp flash-wedge100.v2021.13.1 /dev/mtd5
> > 
> > real    2m23.144s
> > user    0m0.409s
> > sys     2m10.526s
> 
> Since spi0.1 seems to be really slow, could you run
> 
>   time mdsum /dev/mtd5
> 
> and compare with flash-wedge100.v2021.13.1 ? But please update
> "spi-max-frequency" in the DT first.
> 
> Thanks,
> 
> C.
> 
> > 
> > And here are the outpus on cmm (ast2500):
> > 
> > root@cmm001-oob:~# dmesg | grep -i spi
> > [   15.172879] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> > [   15.361516] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> > [   15.442978] 5 fixed-partitions partitions found on MTD device spi0.0
> > [   15.519145] Creating 5 MTD partitions on "spi0.0":
> > [   15.883123] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> > [   16.071286] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
> > [   16.152711] 1 fixed-partitions partitions found on MTD device spi0.1
> > [   16.228830] Creating 1 MTD partitions on "spi0.1":
> > [   63.831721] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> > root@cmm001-oob:/tmp# cat /proc/mtd
> > dev:    size   erasesize  name
> > mtd0: 00060000 00001000 "u-boot"
> > mtd1: 00020000 00001000 "env"
> > mtd2: 01b80000 00001000 "fit"
> > mtd3: 00400000 00001000 "data0"
> > mtd4: 02000000 00001000 "flash0"
> > mtd5: 02000000 00001000 "flash1"
> > root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm
> > -rw-r--r--    1 root     root      23772278 Mar  1 21:04 /tmp/flash-cmm
> > root@cmm001-oob:/tmp# time flashcp /tmp/flash-cmm /dev/mtd4
> > real    3m37.154s
> > user    0m0.260s
> > sys     3m31.700s
> > root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm.v2021.48.0
> > -rw-r--r--    1 root     root      23723958 Mar  1 21:07 /tmp/flash-cmm.v2021.48.0
> > root@cmm001-oob:/tmp# time flashcp flash-cmm.v2021.48.0 /dev/mtd5
> > 
> > real    3m33.843s
> > user    0m0.458s
> > sys     3m28.216s
> > 
> > 
> > Cheers,
> > 
> > Tao
> > 
> > On Sun, Feb 27, 2022 at 07:53:37PM +0100, Cédric Le Goater wrote:
> > > On 2/25/22 06:29, Joel Stanley wrote:
> > > > Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> > > > SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> > > > subsystem, which should mean it can go upstream.
> > > > 
> > > > This is great news, as our current driver is half upstream, half in
> > > > the openbmc tree, due to some issues getting it merged as part of the
> > > > spi-nor subsystem.
> > > > 
> > > > It would be great to have testing. I've created a commit that patches
> > > > in support to whatever kernel tree you're using. Hopefully this makes
> > > > it easier to test atop your internal branches:
> > > > 
> > > > https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> > > > 
> > > > Cherry pick this commit into your tree, and see how it goes, and report back.
> > > > 
> > > > I plan to switch the openbmc tree to this driver when we next rebase
> > > > the kernel. We could also backport it to dev-5.15 as an option.
> > > > 
> > > > You can direct testing results to this thread, or reply directly to
> > > > the upstream thread:
> > > > 
> > > > https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
> > > 
> > > or grab the v2 from :
> > > 
> > >    https://github.com/legoater/linux/tree/openbmc-5.15
> > > 
> > > I have addressed the comments on driver bind/unbind.
> > > 
> > > Thanks,
> > > 
> > > C.
> > > 
> > > > 
> > > > Cheers,
> > > > 
> > > > Joel
> > > > 
> > > > ---------- Forwarded message ---------
> > > > From: Cédric Le Goater <clg@kaod.org>
> > > > Date: Mon, 14 Feb 2022 at 09:42
> > > > Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> > > > To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> > > > Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> > > > <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> > > > Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> > > > <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> > > > <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> > > > Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> > > > <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> > > > Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> > > > <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
> > > > 
> > > > 
> > > > Hi,
> > > > 
> > > > This series adds a new SPI driver using the spi-mem interface for the
> > > > Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> > > > SoCs.
> > > > 
> > > >    * AST2600 Firmware SPI Memory Controller (FMC)
> > > >    * AST2600 SPI Flash Controller (SPI1 and SPI2)
> > > >    * AST2500 Firmware SPI Memory Controller (FMC)
> > > >    * AST2500 SPI Flash Controller (SPI1 and SPI2)
> > > >    * AST2400 New Static Memory Controller (also referred as FMC)
> > > >    * AST2400 SPI Flash Controller (SPI)
> > > > 
> > > > It is based on the current OpenBMC kernel driver [1], using directly
> > > > the MTD SPI-NOR interface and on a patchset [2] previously proposed
> > > > adding support for the AST2600 only. This driver takes a slightly
> > > > different approach to cover all 6 controllers.
> > > > 
> > > > It does not make use of the controller register disabling Address and
> > > > Data byte lanes because is not available on the AST2400 SoC. We could
> > > > introduce a specific handler for new features available on recent SoCs
> > > > if needed. As there is not much difference on performance, the driver
> > > > chooses the common denominator: "User mode" which has been heavily
> > > > tested in [1]. "User mode" is also used as a fall back method when
> > > > flash device mapping window is too small.
> > > > 
> > > > Problems to address with spi-mem were the configuration of the mapping
> > > > windows and the calibration of the read timings. The driver handles
> > > > them in the direct mapping handler when some knowledge on the size of
> > > > the flash device is know. It is not perfect but not incorrect either.
> > > > The algorithm is one from [1] because it doesn't require the DMA
> > > > registers which are not available on all controllers.
> > > > 
> > > > Direct mapping for writes is not supported (yet). I have seen some
> > > > corruption with writes and I preferred to use the safer and proven
> > > > method of the initial driver [1]. We can improve that later.
> > > > 
> > > > The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> > > > didn't have the expected results. Therefore it is not activated yet.
> > > > This needs more tests.
> > > > 
> > > > The series does not remove the current Aspeed SMC driver but prepares
> > > > ground for its removal by changing its CONFIG option. This last step
> > > > can be addressed as a followup when the new driver using the spi-mem
> > > > interface has been sufficiently exposed.
> > > > 
> > > > Tested on:
> > > > 
> > > >    * OpenPOWER Palmetto (AST2400)
> > > >    * Evaluation board (AST2500)
> > > >    * OpenPOWER Witherspoon (AST2500)
> > > >    * Evaluation board (AST2600 A0)
> > > >    * Rainier board (AST2600)
> > > > 
> > > > [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> > > > [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
> > > > 
> > > > Thanks,
> > > > 
> > > > C.
> > > > 
> > > > Cédric Le Goater (10):
> > > >     mtd: spi-nor: aspeed: Rename Kconfig option
> > > >     dt-bindings: spi: Add Aspeed SMC controllers device tree binding
> > > >     spi: spi-mem: Add driver for Aspeed SMC controllers
> > > >     spi: aspeed: Add support for direct mapping
> > > >     spi: aspeed: Adjust direct mapping to device size
> > > >     spi: aspeed: Workaround AST2500 limitations
> > > >     spi: aspeed: Add support for the AST2400 SPI controller
> > > >     spi: aspeed: Calibrate read timings
> > > >     ARM: dts: aspeed: Enable Dual SPI RX transfers
> > > >     spi: aspeed: Activate new spi-mem driver
> > > > 
> > > >    drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
> > > >    .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
> > > >    arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
> > > >    arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
> > > >    arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
> > > >    drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
> > > >    drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
> > > >    drivers/spi/Kconfig                           |   11 +
> > > >    drivers/spi/Makefile                          |    1 +
> > > >    9 files changed, 1369 insertions(+), 3 deletions(-)
> > > >    create mode 100644 drivers/spi/spi-aspeed-smc.c
> > > >    create mode 100644
> > > > Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
> > > > 
> > > > --
> > > > 2.34.1
> > > 
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-02  6:23       ` Cédric Le Goater
  2022-03-02  6:47         ` Tao Ren
@ 2022-03-03  6:03         ` Tao Ren
  2022-03-03  7:02           ` Cédric Le Goater
  1 sibling, 1 reply; 27+ messages in thread
From: Tao Ren @ 2022-03-03  6:03 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Hi Cedric,

The "No good frequency" warning is gone after updating spi-max-frequency
to 50MHz in aspeed-g4.dtsi (thanks). I don't see any functional failures,
but flashcp ran slower compared to the mtd/spi-nor driver(~200 sec vs.
~145 sec when flashcp 32MB data to flash1).

Below are the new results on ast2400:

root@wedge100-bmc:~# dmesg | grep -i spi
[   11.501808] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
[   11.726388] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
[   11.807925] 5 fixed-partitions partitions found on MTD device spi0.0
[   11.884113] Creating 5 MTD partitions on "spi0.0":
[   13.036819] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
[   13.260858] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
[   13.342318] 1 fixed-partitions partitions found on MTD device spi0.1
[   13.418426] Creating 1 MTD partitions on "spi0.1":
[   28.239488] SPI driver bmp280 has no spi_device_id for bosch,bmp085
root@wedge100-bmc:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00060000 00010000 "u-boot"
mtd1: 00020000 00010000 "env"
mtd2: 01b80000 00010000 "fit"
mtd3: 00400000 00010000 "data0"
mtd4: 02000000 00010000 "flash0"
mtd5: 02000000 00010000 "flash1"
root@wedge100-bmc:~# dd if=/dev/urandom of=/tmp/dummy.bin bs=32MB count=1
1+0 records in
1+0 records out
root@wedge100-bmc:~# ls -l /tmp/dummy.bin
-rw-r--r--    1 root     root      32000000 Mar  2 14:45 /tmp/dummy.bin
root@wedge100-bmc:~# time flashcp /tmp/dummy.bin /dev/mtd5

real    3m21.837s
user    0m0.557s
sys     3m4.629s
root@wedge100-bmc:~# time md5sum /dev/mtd5
6903a022e1e8f624ed3beb31aa94c528  /dev/mtd5

real    0m6.869s
user    0m2.492s
sys     0m3.738s
root@wedge100-bmc:~# md5sum /tmp/dummy.bin
7205977a323b482f637123e43ab31a18  /tmp/dummy.bin

And below are the logs after appending "dyndbg" boot args:

root@wedge100-bmc:~# dmesg | grep -i spi
[    0.000000] Kernel command line: console=ttyS2,9600n8 root=/dev/ram rw dyndbg="file drivers/spi/* +p;"
[   11.594461] spi-aspeed-smc 1e620000.spi: registered master spi0
[   11.594628] spi-aspeed-smc 1e620000.spi: CE0 default window [ 0x20000000 - 0x21ffffff ] 32MB
[   11.594709] spi-aspeed-smc 1e620000.spi: CE0 setup done
[   11.594763] spi spi0.0: setup mode 0, 8 bits/w, 50000000 Hz max --> 0
[   11.595737] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x9f mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x6
[   11.595950] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x10
[   11.596103] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x8
[   11.596226] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x70
[   11.596513] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x24
[   11.596732] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
[   11.658369] spi-aspeed-smc 1e620000.spi: CE1 new window [ 0x22000000 - 0x23ffffff ] 32MB
[   11.658457] spi-aspeed-smc 1e620000.spi: calculate timing compensation - AHB freq: 180 MHz
[   11.664951] spi-aspeed-smc 1e620000.spi: Trying HCLK/5 [203c0d41] ...
[   11.692905] spi-aspeed-smc 1e620000.spi:   * [00080000] 0 HCLK delay, 4ns DI delay : PASS
[   11.720911] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
[   11.749067] spi-aspeed-smc 1e620000.spi:   * [00090000] 1 HCLK delay, 4ns DI delay : PASS
[   11.749155] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
[   11.749209] spi-aspeed-smc 1e620000.spi: Trying HCLK/4 [203c0641] ...
[   11.773556] spi-aspeed-smc 1e620000.spi:   * [00008000] 0 HCLK delay, 4ns DI delay : PASS
[   11.797835] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
[   11.822419] spi-aspeed-smc 1e620000.spi:   * [00009000] 1 HCLK delay, 4ns DI delay : PASS
[   11.822505] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
[   11.822558] spi-aspeed-smc 1e620000.spi: Found good read timings at HCLK/4
[   11.822607] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
[   11.904076] 5 fixed-partitions partitions found on MTD device spi0.0
[   11.980270] Creating 5 MTD partitions on "spi0.0":
[   13.151908] spi-aspeed-smc 1e620000.spi: registered child spi0.0
[   13.152074] spi-aspeed-smc 1e620000.spi: CE1 default window [ 0x22000000 - 0x23ffffff ] 32MB
[   13.152151] spi-aspeed-smc 1e620000.spi: CE1 setup done
[   13.152201] spi spi0.1: setup mode 0, 8 bits/w, 50000000 Hz max --> 0
[   13.153185] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x9f mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x6
[   13.153399] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x10
[   13.153552] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x8
[   13.153674] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x70
[   13.153961] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x24
[   13.154180] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
[   13.215872] spi-aspeed-smc 1e620000.spi: CE2 new window [ 0x24000000 - 0x25ffffff ] 32MB
[   13.215962] spi-aspeed-smc 1e620000.spi: calculate timing compensation - AHB freq: 180 MHz
[   13.222431] spi-aspeed-smc 1e620000.spi: Trying HCLK/5 [203c0d41] ...
[   13.250258] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 4ns DI delay : PASS
[   13.278256] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
[   13.306252] spi-aspeed-smc 1e620000.spi:   * [00000000] 1 HCLK delay, 4ns DI delay : PASS
[   13.306337] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
[   13.306392] spi-aspeed-smc 1e620000.spi: Trying HCLK/4 [203c0641] ...
[   13.330735] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 4ns DI delay : PASS
[   13.355007] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
[   13.379274] spi-aspeed-smc 1e620000.spi:   * [00000000] 1 HCLK delay, 4ns DI delay : PASS
[   13.379362] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
[   13.379416] spi-aspeed-smc 1e620000.spi: Found good read timings at HCLK/4
[   13.379465] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
[   13.460934] 1 fixed-partitions partitions found on MTD device spi0.1
[   13.537042] Creating 1 MTD partitions on "spi0.1":
[   14.145255] spi-aspeed-smc 1e620000.spi: registered child spi0.1
[   28.287508] SPI driver bmp280 has no spi_device_id for bosch,bmp085
[  116.047752] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
[  116.047894] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0x44
[  116.048011] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.048109] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.048260] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
[  116.048363] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0xc
[  116.048461] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.049421] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
[  116.049559] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0x44
[  116.049676] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.049773] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.049872] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
[  116.049969] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0x39
[  116.050070] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.050159] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
[  116.050307] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
[  116.050416] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0xc
[  116.050513] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1


Cheers,

Tao

On Wed, Mar 02, 2022 at 07:23:15AM +0100, Cédric Le Goater wrote:
> Hello Tao,
> 
> On 3/2/22 07:05, Tao Ren wrote:
> > Hi Cedric,
> > 
> > I tested v2 on wedge100 (ast2400) and cmm (ast2500). I don't see any
> > functional failures except below warning on ast2400.
> 
> Thanks for the tests
> 
> > Is it something we should worry about?
> > 
> > > spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
> 
> 
> This means that the training failed for all HCLK settings. We never had
> an AST2400 board with a second device on the FMC controller but we noticed
> that any freq setting above 50MHz was unstable.
> 
> Also, aspeed-g4.dtsi does not have any "spi-max-frequency" for flash@1.
> This needs an update.
> 
> > The v2 patch series (10 patches) were applied to linux stable 5.15.25,
> > and below are the outputs on wedge100 (ast2400):
> > 
> > root@wedge100-bmc:~# dmesg | grep -i spi
> > [   11.479736] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> > [   11.704313] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> > [   11.785842] 5 fixed-partitions partitions found on MTD device spi0.0
> > [   11.862033] Creating 5 MTD partitions on "spi0.0":
> > [   13.039009] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> > [   13.107056] spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
> > [   13.190551] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0041]
> > [   13.271959] 1 fixed-partitions partitions found on MTD device spi0.1
> > [   13.348097] Creating 1 MTD partitions on "spi0.1":
> 
> Curious. The device seems alive and very slow.
> 
> Could you please add "dyndbg="file drivers/spi/* +p;" to the bootargs
> and reboot ?
> 
> 
> > [   28.169886] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> > root@wedge100-bmc:/tmp# cat /proc/mtd
> > dev:    size   erasesize  name
> > mtd0: 00060000 00010000 "u-boot"
> > mtd1: 00020000 00010000 "env"
> > mtd2: 01b80000 00010000 "fit"
> > mtd3: 00400000 00010000 "data0"
> > mtd4: 02000000 00010000 "flash0"
> > mtd5: 02000000 00010000 "flash1"
> > root@wedge100-bmc:/tmp# ls -l flash-wedge100
> > -rw-r--r--    1 root     root      22867574 Mar  1 20:49 flash-wedge100
> > root@wedge100-bmc:/tmp# time flashcp flash-wedge100 /dev/mtd4
> > 
> > real    2m22.860s
> > user    0m0.478s
> > sys     2m10.647s
> > root@wedge100-bmc:/tmp# ls -l flash-wedge100.v2021.13.1
> > -rw-r--r--    1 root     root      19743390 Mar  1 10:10 flash-wedge100.v2021.13.1
> > root@wedge100-bmc:/tmp# time flashcp flash-wedge100.v2021.13.1 /dev/mtd5
> > 
> > real    2m23.144s
> > user    0m0.409s
> > sys     2m10.526s
> 
> Since spi0.1 seems to be really slow, could you run
> 
>   time mdsum /dev/mtd5
> 
> and compare with flash-wedge100.v2021.13.1 ? But please update
> "spi-max-frequency" in the DT first.
> 
> Thanks,
> 
> C.
> 
> > 
> > And here are the outpus on cmm (ast2500):
> > 
> > root@cmm001-oob:~# dmesg | grep -i spi
> > [   15.172879] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> > [   15.361516] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> > [   15.442978] 5 fixed-partitions partitions found on MTD device spi0.0
> > [   15.519145] Creating 5 MTD partitions on "spi0.0":
> > [   15.883123] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> > [   16.071286] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
> > [   16.152711] 1 fixed-partitions partitions found on MTD device spi0.1
> > [   16.228830] Creating 1 MTD partitions on "spi0.1":
> > [   63.831721] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> > root@cmm001-oob:/tmp# cat /proc/mtd
> > dev:    size   erasesize  name
> > mtd0: 00060000 00001000 "u-boot"
> > mtd1: 00020000 00001000 "env"
> > mtd2: 01b80000 00001000 "fit"
> > mtd3: 00400000 00001000 "data0"
> > mtd4: 02000000 00001000 "flash0"
> > mtd5: 02000000 00001000 "flash1"
> > root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm
> > -rw-r--r--    1 root     root      23772278 Mar  1 21:04 /tmp/flash-cmm
> > root@cmm001-oob:/tmp# time flashcp /tmp/flash-cmm /dev/mtd4
> > real    3m37.154s
> > user    0m0.260s
> > sys     3m31.700s
> > root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm.v2021.48.0
> > -rw-r--r--    1 root     root      23723958 Mar  1 21:07 /tmp/flash-cmm.v2021.48.0
> > root@cmm001-oob:/tmp# time flashcp flash-cmm.v2021.48.0 /dev/mtd5
> > 
> > real    3m33.843s
> > user    0m0.458s
> > sys     3m28.216s
> > 
> > 
> > Cheers,
> > 
> > Tao
> > 
> > On Sun, Feb 27, 2022 at 07:53:37PM +0100, Cédric Le Goater wrote:
> > > On 2/25/22 06:29, Joel Stanley wrote:
> > > > Cedric has authored a new drive for the SPI NOR devices on the ASPEED
> > > > SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
> > > > subsystem, which should mean it can go upstream.
> > > > 
> > > > This is great news, as our current driver is half upstream, half in
> > > > the openbmc tree, due to some issues getting it merged as part of the
> > > > spi-nor subsystem.
> > > > 
> > > > It would be great to have testing. I've created a commit that patches
> > > > in support to whatever kernel tree you're using. Hopefully this makes
> > > > it easier to test atop your internal branches:
> > > > 
> > > > https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
> > > > 
> > > > Cherry pick this commit into your tree, and see how it goes, and report back.
> > > > 
> > > > I plan to switch the openbmc tree to this driver when we next rebase
> > > > the kernel. We could also backport it to dev-5.15 as an option.
> > > > 
> > > > You can direct testing results to this thread, or reply directly to
> > > > the upstream thread:
> > > > 
> > > > https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
> > > 
> > > or grab the v2 from :
> > > 
> > >    https://github.com/legoater/linux/tree/openbmc-5.15
> > > 
> > > I have addressed the comments on driver bind/unbind.
> > > 
> > > Thanks,
> > > 
> > > C.
> > > 
> > > > 
> > > > Cheers,
> > > > 
> > > > Joel
> > > > 
> > > > ---------- Forwarded message ---------
> > > > From: Cédric Le Goater <clg@kaod.org>
> > > > Date: Mon, 14 Feb 2022 at 09:42
> > > > Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
> > > > To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
> > > > Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
> > > > <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
> > > > Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
> > > > <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
> > > > <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
> > > > Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
> > > > <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
> > > > Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
> > > > <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
> > > > 
> > > > 
> > > > Hi,
> > > > 
> > > > This series adds a new SPI driver using the spi-mem interface for the
> > > > Aspeed static memory controllers of the AST2600, AST2500 and AST2400
> > > > SoCs.
> > > > 
> > > >    * AST2600 Firmware SPI Memory Controller (FMC)
> > > >    * AST2600 SPI Flash Controller (SPI1 and SPI2)
> > > >    * AST2500 Firmware SPI Memory Controller (FMC)
> > > >    * AST2500 SPI Flash Controller (SPI1 and SPI2)
> > > >    * AST2400 New Static Memory Controller (also referred as FMC)
> > > >    * AST2400 SPI Flash Controller (SPI)
> > > > 
> > > > It is based on the current OpenBMC kernel driver [1], using directly
> > > > the MTD SPI-NOR interface and on a patchset [2] previously proposed
> > > > adding support for the AST2600 only. This driver takes a slightly
> > > > different approach to cover all 6 controllers.
> > > > 
> > > > It does not make use of the controller register disabling Address and
> > > > Data byte lanes because is not available on the AST2400 SoC. We could
> > > > introduce a specific handler for new features available on recent SoCs
> > > > if needed. As there is not much difference on performance, the driver
> > > > chooses the common denominator: "User mode" which has been heavily
> > > > tested in [1]. "User mode" is also used as a fall back method when
> > > > flash device mapping window is too small.
> > > > 
> > > > Problems to address with spi-mem were the configuration of the mapping
> > > > windows and the calibration of the read timings. The driver handles
> > > > them in the direct mapping handler when some knowledge on the size of
> > > > the flash device is know. It is not perfect but not incorrect either.
> > > > The algorithm is one from [1] because it doesn't require the DMA
> > > > registers which are not available on all controllers.
> > > > 
> > > > Direct mapping for writes is not supported (yet). I have seen some
> > > > corruption with writes and I preferred to use the safer and proven
> > > > method of the initial driver [1]. We can improve that later.
> > > > 
> > > > The driver supports Quad SPI RX transfers on the AST2600 SoC but it
> > > > didn't have the expected results. Therefore it is not activated yet.
> > > > This needs more tests.
> > > > 
> > > > The series does not remove the current Aspeed SMC driver but prepares
> > > > ground for its removal by changing its CONFIG option. This last step
> > > > can be addressed as a followup when the new driver using the spi-mem
> > > > interface has been sufficiently exposed.
> > > > 
> > > > Tested on:
> > > > 
> > > >    * OpenPOWER Palmetto (AST2400)
> > > >    * Evaluation board (AST2500)
> > > >    * OpenPOWER Witherspoon (AST2500)
> > > >    * Evaluation board (AST2600 A0)
> > > >    * Rainier board (AST2600)
> > > > 
> > > > [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
> > > > [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
> > > > 
> > > > Thanks,
> > > > 
> > > > C.
> > > > 
> > > > Cédric Le Goater (10):
> > > >     mtd: spi-nor: aspeed: Rename Kconfig option
> > > >     dt-bindings: spi: Add Aspeed SMC controllers device tree binding
> > > >     spi: spi-mem: Add driver for Aspeed SMC controllers
> > > >     spi: aspeed: Add support for direct mapping
> > > >     spi: aspeed: Adjust direct mapping to device size
> > > >     spi: aspeed: Workaround AST2500 limitations
> > > >     spi: aspeed: Add support for the AST2400 SPI controller
> > > >     spi: aspeed: Calibrate read timings
> > > >     ARM: dts: aspeed: Enable Dual SPI RX transfers
> > > >     spi: aspeed: Activate new spi-mem driver
> > > > 
> > > >    drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
> > > >    .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
> > > >    arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
> > > >    arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
> > > >    arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
> > > >    drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
> > > >    drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
> > > >    drivers/spi/Kconfig                           |   11 +
> > > >    drivers/spi/Makefile                          |    1 +
> > > >    9 files changed, 1369 insertions(+), 3 deletions(-)
> > > >    create mode 100644 drivers/spi/spi-aspeed-smc.c
> > > >    create mode 100644
> > > > Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
> > > > 
> > > > --
> > > > 2.34.1
> > > 
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-03  6:03         ` Tao Ren
@ 2022-03-03  7:02           ` Cédric Le Goater
  2022-03-04  7:53             ` Tao Ren
  0 siblings, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-03  7:02 UTC (permalink / raw)
  To: Tao Ren; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Hello Tao,

On 3/3/22 07:03, Tao Ren wrote:
> Hi Cedric,
> 
> The "No good frequency" warning is gone after updating spi-max-frequency
> to 50MHz in aspeed-g4.dtsi (thanks). I don't see any functional failures,

Super !

May be send the "spi-max-frequency" patch ? I can include it in a v3 if a
resend is needed.

> but flashcp ran slower compared to the mtd/spi-nor driver(~200 sec vs.
> ~145 sec when flashcp 32MB data to flash1).

Interesting, the HW settings should be the same. Was the dynamic debug
activated ?
> Below are the new results on ast2400:
> 
> root@wedge100-bmc:~# dmesg | grep -i spi
> [   11.501808] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
> [   11.726388] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [   11.807925] 5 fixed-partitions partitions found on MTD device spi0.0
> [   11.884113] Creating 5 MTD partitions on "spi0.0":
> [   13.036819] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> [   13.260858] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
> [   13.342318] 1 fixed-partitions partitions found on MTD device spi0.1
> [   13.418426] Creating 1 MTD partitions on "spi0.1":
> [   28.239488] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> root@wedge100-bmc:~# cat /proc/mtd
> dev:    size   erasesize  name
> mtd0: 00060000 00010000 "u-boot"
> mtd1: 00020000 00010000 "env"
> mtd2: 01b80000 00010000 "fit"
> mtd3: 00400000 00010000 "data0"
> mtd4: 02000000 00010000 "flash0"
> mtd5: 02000000 00010000 "flash1"
> root@wedge100-bmc:~# dd if=/dev/urandom of=/tmp/dummy.bin bs=32MB count=1
> 1+0 records in
> 1+0 records out
> root@wedge100-bmc:~# ls -l /tmp/dummy.bin
> -rw-r--r--    1 root     root      32000000 Mar  2 14:45 /tmp/dummy.bin
> root@wedge100-bmc:~# time flashcp /tmp/dummy.bin /dev/mtd5
> 
> real    3m21.837s
> user    0m0.557s
> sys     3m4.629s
> root@wedge100-bmc:~# time md5sum /dev/mtd5
> 6903a022e1e8f624ed3beb31aa94c528  /dev/mtd5
> 
> real    0m6.869s
> user    0m2.492s
> sys     0m3.738s
> root@wedge100-bmc:~# md5sum /tmp/dummy.bin
> 7205977a323b482f637123e43ab31a18  /tmp/dummy.bin
> 
> And below are the logs after appending "dyndbg" boot args:
> 
> root@wedge100-bmc:~# dmesg | grep -i spi
> [    0.000000] Kernel command line: console=ttyS2,9600n8 root=/dev/ram rw dyndbg="file drivers/spi/* +p;"
> [   11.594461] spi-aspeed-smc 1e620000.spi: registered master spi0
> [   11.594628] spi-aspeed-smc 1e620000.spi: CE0 default window [ 0x20000000 - 0x21ffffff ] 32MB
> [   11.594709] spi-aspeed-smc 1e620000.spi: CE0 setup done
> [   11.594763] spi spi0.0: setup mode 0, 8 bits/w, 50000000 Hz max --> 0
> [   11.595737] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x9f mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x6
> [   11.595950] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x10
> [   11.596103] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x8
> [   11.596226] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x70
> [   11.596513] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x24
> [   11.596732] spi-nor spi0.0: mx25l25635e (32768 Kbytes)

I am quite sure this is a MX25L25635F. I add this little patch to my kernel
  to check :

     @@ -22,8 +22,10 @@ mx25l25635_post_bfpt_fixups(struct spi_n
      	 * seems that the F version advertises support for Fast Read 4-4-4 in
      	 * its BFPT table.
      	 */
     -	if (bfpt->dwords[BFPT_DWORD(5)] & BFPT_DWORD5_FAST_READ_4_4_4)
     +	if (bfpt->dwords[BFPT_DWORD(5)] & BFPT_DWORD5_FAST_READ_4_4_4) {
     +		dev_warn(nor->dev, "This is a MX25L25635F\n");
      		nor->flags |= SNOR_F_4B_OPCODES;
     +	}
      
      	return 0;
      }
     
It would be nice to change the spi-nor layer to report the name correctly
one day. I will see what can be done.

> [   11.658369] spi-aspeed-smc 1e620000.spi: CE1 new window [ 0x22000000 - 0x23ffffff ] 32MB
> [   11.658457] spi-aspeed-smc 1e620000.spi: calculate timing compensation - AHB freq: 180 MHz
> [   11.664951] spi-aspeed-smc 1e620000.spi: Trying HCLK/5 [203c0d41] ...
> [   11.692905] spi-aspeed-smc 1e620000.spi:   * [00080000] 0 HCLK delay, 4ns DI delay : PASS
> [   11.720911] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
> [   11.749067] spi-aspeed-smc 1e620000.spi:   * [00090000] 1 HCLK delay, 4ns DI delay : PASS
> [   11.749155] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
> [   11.749209] spi-aspeed-smc 1e620000.spi: Trying HCLK/4 [203c0641] ...
> [   11.773556] spi-aspeed-smc 1e620000.spi:   * [00008000] 0 HCLK delay, 4ns DI delay : PASS
> [   11.797835] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
> [   11.822419] spi-aspeed-smc 1e620000.spi:   * [00009000] 1 HCLK delay, 4ns DI delay : PASS
> [   11.822505] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
> [   11.822558] spi-aspeed-smc 1e620000.spi: Found good read timings at HCLK/4
> [   11.822607] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> [   11.904076] 5 fixed-partitions partitions found on MTD device spi0.0
> [   11.980270] Creating 5 MTD partitions on "spi0.0":
> [   13.151908] spi-aspeed-smc 1e620000.spi: registered child spi0.0
> [   13.152074] spi-aspeed-smc 1e620000.spi: CE1 default window [ 0x22000000 - 0x23ffffff ] 32MB
> [   13.152151] spi-aspeed-smc 1e620000.spi: CE1 setup done
> [   13.152201] spi spi0.1: setup mode 0, 8 bits/w, 50000000 Hz max --> 0
> [   13.153185] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x9f mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x6
> [   13.153399] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x10
> [   13.153552] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x8
> [   13.153674] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x70
> [   13.153961] spi-aspeed-smc 1e620000.spi: CE1 read OP 0x5a mode:1.1.1.1 naddr:0x3 ndummies:0x1 len:0x24
> [   13.154180] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
> [   13.215872] spi-aspeed-smc 1e620000.spi: CE2 new window [ 0x24000000 - 0x25ffffff ] 32MB
> [   13.215962] spi-aspeed-smc 1e620000.spi: calculate timing compensation - AHB freq: 180 MHz
> [   13.222431] spi-aspeed-smc 1e620000.spi: Trying HCLK/5 [203c0d41] ...
> [   13.250258] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 4ns DI delay : PASS
> [   13.278256] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
> [   13.306252] spi-aspeed-smc 1e620000.spi:   * [00000000] 1 HCLK delay, 4ns DI delay : PASS
> [   13.306337] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
> [   13.306392] spi-aspeed-smc 1e620000.spi: Trying HCLK/4 [203c0641] ...
> [   13.330735] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 4ns DI delay : PASS
> [   13.355007] spi-aspeed-smc 1e620000.spi:   * [00000000] 0 HCLK delay, 0ns DI delay : PASS
> [   13.379274] spi-aspeed-smc 1e620000.spi:   * [00000000] 1 HCLK delay, 4ns DI delay : PASS
> [   13.379362] spi-aspeed-smc 1e620000.spi:  * -> good is pass 1 [0x00000000]
> [   13.379416] spi-aspeed-smc 1e620000.spi: Found good read timings at HCLK/4
> [   13.379465] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
> [   13.460934] 1 fixed-partitions partitions found on MTD device spi0.1
> [   13.537042] Creating 1 MTD partitions on "spi0.1":
> [   14.145255] spi-aspeed-smc 1e620000.spi: registered child spi0.1
> [   28.287508] SPI driver bmp280 has no spi_device_id for bosch,bmp085
> [  116.047752] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
> [  116.047894] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0x44
> [  116.048011] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.048109] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.048260] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
> [  116.048363] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0xc
> [  116.048461] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.049421] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
> [  116.049559] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0x44
> [  116.049676] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.049773] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.049872] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
> [  116.049969] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0x39
> [  116.050070] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.050159] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1
> [  116.050307] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x6 mode:1.0.0.0 naddr:0x0 ndummies:0x0 len:0x0
> [  116.050416] spi-aspeed-smc 1e620000.spi: CE0 write OP 0x12 mode:1.1.0.1 naddr:0x4 ndummies:0x0 len:0xc
> [  116.050513] spi-aspeed-smc 1e620000.spi: CE0 read OP 0x5 mode:1.0.0.1 naddr:0x0 ndummies:0x0 len:0x1

0x12 is "page program". I think that's where the slow down comes from.

you can switch off the logging after boot with :

   mount -t debugfs debugfs /sys/kernel/debug/
   echo -n "file drivers/spi/* -p" > /sys/kernel/debug/dynamic_debug/control

Thanks a lot for the tests !

C.

  
> 
> Cheers,
> 
> Tao
> 
> On Wed, Mar 02, 2022 at 07:23:15AM +0100, Cédric Le Goater wrote:
>> Hello Tao,
>>
>> On 3/2/22 07:05, Tao Ren wrote:
>>> Hi Cedric,
>>>
>>> I tested v2 on wedge100 (ast2400) and cmm (ast2500). I don't see any
>>> functional failures except below warning on ast2400.
>>
>> Thanks for the tests
>>
>>> Is it something we should worry about?
>>>
>>>> spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
>>
>>
>> This means that the training failed for all HCLK settings. We never had
>> an AST2400 board with a second device on the FMC controller but we noticed
>> that any freq setting above 50MHz was unstable.
>>
>> Also, aspeed-g4.dtsi does not have any "spi-max-frequency" for flash@1.
>> This needs an update.
>>
>>> The v2 patch series (10 patches) were applied to linux stable 5.15.25,
>>> and below are the outputs on wedge100 (ast2400):
>>>
>>> root@wedge100-bmc:~# dmesg | grep -i spi
>>> [   11.479736] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
>>> [   11.704313] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
>>> [   11.785842] 5 fixed-partitions partitions found on MTD device spi0.0
>>> [   11.862033] Creating 5 MTD partitions on "spi0.0":
>>> [   13.039009] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
>>> [   13.107056] spi-aspeed-smc 1e620000.spi: No good frequency, using dumb slow
>>> [   13.190551] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0041]
>>> [   13.271959] 1 fixed-partitions partitions found on MTD device spi0.1
>>> [   13.348097] Creating 1 MTD partitions on "spi0.1":
>>
>> Curious. The device seems alive and very slow.
>>
>> Could you please add "dyndbg="file drivers/spi/* +p;" to the bootargs
>> and reboot ?
>>
>>
>>> [   28.169886] SPI driver bmp280 has no spi_device_id for bosch,bmp085
>>> root@wedge100-bmc:/tmp# cat /proc/mtd
>>> dev:    size   erasesize  name
>>> mtd0: 00060000 00010000 "u-boot"
>>> mtd1: 00020000 00010000 "env"
>>> mtd2: 01b80000 00010000 "fit"
>>> mtd3: 00400000 00010000 "data0"
>>> mtd4: 02000000 00010000 "flash0"
>>> mtd5: 02000000 00010000 "flash1"
>>> root@wedge100-bmc:/tmp# ls -l flash-wedge100
>>> -rw-r--r--    1 root     root      22867574 Mar  1 20:49 flash-wedge100
>>> root@wedge100-bmc:/tmp# time flashcp flash-wedge100 /dev/mtd4
>>>
>>> real    2m22.860s
>>> user    0m0.478s
>>> sys     2m10.647s
>>> root@wedge100-bmc:/tmp# ls -l flash-wedge100.v2021.13.1
>>> -rw-r--r--    1 root     root      19743390 Mar  1 10:10 flash-wedge100.v2021.13.1
>>> root@wedge100-bmc:/tmp# time flashcp flash-wedge100.v2021.13.1 /dev/mtd5
>>>
>>> real    2m23.144s
>>> user    0m0.409s
>>> sys     2m10.526s
>>
>> Since spi0.1 seems to be really slow, could you run
>>
>>    time mdsum /dev/mtd5
>>
>> and compare with flash-wedge100.v2021.13.1 ? But please update
>> "spi-max-frequency" in the DT first.
>>
>> Thanks,
>>
>> C.
>>
>>>
>>> And here are the outpus on cmm (ast2500):
>>>
>>> root@cmm001-oob:~# dmesg | grep -i spi
>>> [   15.172879] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
>>> [   15.361516] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
>>> [   15.442978] 5 fixed-partitions partitions found on MTD device spi0.0
>>> [   15.519145] Creating 5 MTD partitions on "spi0.0":
>>> [   15.883123] spi-nor spi0.1: mx25l25635e (32768 Kbytes)
>>> [   16.071286] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
>>> [   16.152711] 1 fixed-partitions partitions found on MTD device spi0.1
>>> [   16.228830] Creating 1 MTD partitions on "spi0.1":
>>> [   63.831721] SPI driver bmp280 has no spi_device_id for bosch,bmp085
>>> root@cmm001-oob:/tmp# cat /proc/mtd
>>> dev:    size   erasesize  name
>>> mtd0: 00060000 00001000 "u-boot"
>>> mtd1: 00020000 00001000 "env"
>>> mtd2: 01b80000 00001000 "fit"
>>> mtd3: 00400000 00001000 "data0"
>>> mtd4: 02000000 00001000 "flash0"
>>> mtd5: 02000000 00001000 "flash1"
>>> root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm
>>> -rw-r--r--    1 root     root      23772278 Mar  1 21:04 /tmp/flash-cmm
>>> root@cmm001-oob:/tmp# time flashcp /tmp/flash-cmm /dev/mtd4
>>> real    3m37.154s
>>> user    0m0.260s
>>> sys     3m31.700s
>>> root@cmm001-oob:/tmp# ls -l /tmp/flash-cmm.v2021.48.0
>>> -rw-r--r--    1 root     root      23723958 Mar  1 21:07 /tmp/flash-cmm.v2021.48.0
>>> root@cmm001-oob:/tmp# time flashcp flash-cmm.v2021.48.0 /dev/mtd5
>>>
>>> real    3m33.843s
>>> user    0m0.458s
>>> sys     3m28.216s
>>>
>>>
>>> Cheers,
>>>
>>> Tao
>>>
>>> On Sun, Feb 27, 2022 at 07:53:37PM +0100, Cédric Le Goater wrote:
>>>> On 2/25/22 06:29, Joel Stanley wrote:
>>>>> Cedric has authored a new drive for the SPI NOR devices on the ASPEED
>>>>> SoCs. It supports 2400, 2500 and 2600. It is written using the spi-mem
>>>>> subsystem, which should mean it can go upstream.
>>>>>
>>>>> This is great news, as our current driver is half upstream, half in
>>>>> the openbmc tree, due to some issues getting it merged as part of the
>>>>> spi-nor subsystem.
>>>>>
>>>>> It would be great to have testing. I've created a commit that patches
>>>>> in support to whatever kernel tree you're using. Hopefully this makes
>>>>> it easier to test atop your internal branches:
>>>>>
>>>>> https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/51551
>>>>>
>>>>> Cherry pick this commit into your tree, and see how it goes, and report back.
>>>>>
>>>>> I plan to switch the openbmc tree to this driver when we next rebase
>>>>> the kernel. We could also backport it to dev-5.15 as an option.
>>>>>
>>>>> You can direct testing results to this thread, or reply directly to
>>>>> the upstream thread:
>>>>>
>>>>> https://lore.kernel.org/all/20220214094231.3753686-1-clg@kaod.org/
>>>>
>>>> or grab the v2 from :
>>>>
>>>>     https://github.com/legoater/linux/tree/openbmc-5.15
>>>>
>>>> I have addressed the comments on driver bind/unbind.
>>>>
>>>> Thanks,
>>>>
>>>> C.
>>>>
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Joel
>>>>>
>>>>> ---------- Forwarded message ---------
>>>>> From: Cédric Le Goater <clg@kaod.org>
>>>>> Date: Mon, 14 Feb 2022 at 09:42
>>>>> Subject: [PATCH 00/10] spi: spi-mem: Add driver for Aspeed SMC controllers
>>>>> To: <linux-spi@vger.kernel.org>, <linux-mtd@lists.infradead.org>
>>>>> Cc: Mark Brown <broonie@kernel.org>, Tudor Ambarus
>>>>> <tudor.ambarus@microchip.com>, Pratyush Yadav <p.yadav@ti.com>, Miquel
>>>>> Raynal <miquel.raynal@bootlin.com>, Richard Weinberger
>>>>> <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>,
>>>>> <linux-aspeed@lists.ozlabs.org>, Joel Stanley <joel@jms.id.au>, Andrew
>>>>> Jeffery <andrew@aj.id.au>, Chin-Ting Kuo
>>>>> <chin-ting_kuo@aspeedtech.com>, <devicetree@vger.kernel.org>, Rob
>>>>> Herring <robh+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
>>>>> <linux-kernel@vger.kernel.org>, Cédric Le Goater <clg@kaod.org>
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> This series adds a new SPI driver using the spi-mem interface for the
>>>>> Aspeed static memory controllers of the AST2600, AST2500 and AST2400
>>>>> SoCs.
>>>>>
>>>>>     * AST2600 Firmware SPI Memory Controller (FMC)
>>>>>     * AST2600 SPI Flash Controller (SPI1 and SPI2)
>>>>>     * AST2500 Firmware SPI Memory Controller (FMC)
>>>>>     * AST2500 SPI Flash Controller (SPI1 and SPI2)
>>>>>     * AST2400 New Static Memory Controller (also referred as FMC)
>>>>>     * AST2400 SPI Flash Controller (SPI)
>>>>>
>>>>> It is based on the current OpenBMC kernel driver [1], using directly
>>>>> the MTD SPI-NOR interface and on a patchset [2] previously proposed
>>>>> adding support for the AST2600 only. This driver takes a slightly
>>>>> different approach to cover all 6 controllers.
>>>>>
>>>>> It does not make use of the controller register disabling Address and
>>>>> Data byte lanes because is not available on the AST2400 SoC. We could
>>>>> introduce a specific handler for new features available on recent SoCs
>>>>> if needed. As there is not much difference on performance, the driver
>>>>> chooses the common denominator: "User mode" which has been heavily
>>>>> tested in [1]. "User mode" is also used as a fall back method when
>>>>> flash device mapping window is too small.
>>>>>
>>>>> Problems to address with spi-mem were the configuration of the mapping
>>>>> windows and the calibration of the read timings. The driver handles
>>>>> them in the direct mapping handler when some knowledge on the size of
>>>>> the flash device is know. It is not perfect but not incorrect either.
>>>>> The algorithm is one from [1] because it doesn't require the DMA
>>>>> registers which are not available on all controllers.
>>>>>
>>>>> Direct mapping for writes is not supported (yet). I have seen some
>>>>> corruption with writes and I preferred to use the safer and proven
>>>>> method of the initial driver [1]. We can improve that later.
>>>>>
>>>>> The driver supports Quad SPI RX transfers on the AST2600 SoC but it
>>>>> didn't have the expected results. Therefore it is not activated yet.
>>>>> This needs more tests.
>>>>>
>>>>> The series does not remove the current Aspeed SMC driver but prepares
>>>>> ground for its removal by changing its CONFIG option. This last step
>>>>> can be addressed as a followup when the new driver using the spi-mem
>>>>> interface has been sufficiently exposed.
>>>>>
>>>>> Tested on:
>>>>>
>>>>>     * OpenPOWER Palmetto (AST2400)
>>>>>     * Evaluation board (AST2500)
>>>>>     * OpenPOWER Witherspoon (AST2500)
>>>>>     * Evaluation board (AST2600 A0)
>>>>>     * Rainier board (AST2600)
>>>>>
>>>>> [1] https://github.com/openbmc/linux/blob/dev-5.15/drivers/mtd/spi-nor/controllers/aspeed-smc.c
>>>>> [2] https://patchwork.ozlabs.org/project/linux-aspeed/list/?series=212394
>>>>>
>>>>> Thanks,
>>>>>
>>>>> C.
>>>>>
>>>>> Cédric Le Goater (10):
>>>>>      mtd: spi-nor: aspeed: Rename Kconfig option
>>>>>      dt-bindings: spi: Add Aspeed SMC controllers device tree binding
>>>>>      spi: spi-mem: Add driver for Aspeed SMC controllers
>>>>>      spi: aspeed: Add support for direct mapping
>>>>>      spi: aspeed: Adjust direct mapping to device size
>>>>>      spi: aspeed: Workaround AST2500 limitations
>>>>>      spi: aspeed: Add support for the AST2400 SPI controller
>>>>>      spi: aspeed: Calibrate read timings
>>>>>      ARM: dts: aspeed: Enable Dual SPI RX transfers
>>>>>      spi: aspeed: Activate new spi-mem driver
>>>>>
>>>>>     drivers/spi/spi-aspeed-smc.c                  | 1241 +++++++++++++++++
>>>>>     .../bindings/spi/aspeed,ast2600-fmc.yaml      |   92 ++
>>>>>     arch/arm/boot/dts/aspeed-g4.dtsi              |    6 +
>>>>>     arch/arm/boot/dts/aspeed-g5.dtsi              |    7 +
>>>>>     arch/arm/boot/dts/aspeed-g6.dtsi              |    8 +
>>>>>     drivers/mtd/spi-nor/controllers/Kconfig       |    4 +-
>>>>>     drivers/mtd/spi-nor/controllers/Makefile      |    2 +-
>>>>>     drivers/spi/Kconfig                           |   11 +
>>>>>     drivers/spi/Makefile                          |    1 +
>>>>>     9 files changed, 1369 insertions(+), 3 deletions(-)
>>>>>     create mode 100644 drivers/spi/spi-aspeed-smc.c
>>>>>     create mode 100644
>>>>> Documentation/devicetree/bindings/spi/aspeed,ast2600-fmc.yaml
>>>>>
>>>>> --
>>>>> 2.34.1
>>>>
>>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-02  5:45       ` Cédric Le Goater
@ 2022-03-03  9:45         ` Joel Stanley
  2022-03-03  9:51           ` Cédric Le Goater
  0 siblings, 1 reply; 27+ messages in thread
From: Joel Stanley @ 2022-03-03  9:45 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: Ryan Chen, OpenBMC Maillist, Lei Yu, John Wang

On Wed, 2 Mar 2022 at 05:45, Cédric Le Goater <clg@kaod.org> wrote:
>
> On 3/1/22 13:20, Joel Stanley wrote:

> > [    0.746796] spi-nor spi0.0: w25q512jv (65536 Kbytes)
> > [    0.808104] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
> > [    0.862687] spi-nor spi0.1: w25q512jv (65536 Kbytes)
> > [    0.923991] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
>
>
> On the FMC controller, could you please increase the clock to :
>
>         spi-max-frequency = <100000000>;
>
> and check the results ?

+++ b/arch/arm/boot/dts/aspeed-ast2600-evb.dts
@@ -162,7 +162,7 @@ flash@0 {
                status = "okay";
                m25p,fast-read;
                label = "bmc";
-               spi-max-frequency = <50000000>;
+               spi-max-frequency = <100000000>;
 #include "openbmc-flash-layout-64.dtsi"
        };

@@ -170,6 +170,7 @@ flash@1 {
                status = "okay";
                m25p,fast-read;
                label = "alt-bmc";
+               spi-max-frequency = <100000000>;
        };
 };



# dmesg |grep spi
[    0.746939] spi-nor spi0.0: w25q512jv (65536 Kbytes)
[    0.904547] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0741]
[    0.959048] spi-nor spi0.1: w25q512jv (65536 Kbytes)
[    1.116603] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0741]
[    1.130483] spi-nor spi1.0: w25q256 (32768 Kbytes)
[    1.255015] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
[    1.269188] spi-nor spi2.0: gd25q256 (32768 Kbytes)
[    1.366623] spi-aspeed-smc 1e631000.spi: CE0 read buswidth:2 [0x203c0741]

# fdtget /sys/firmware/fdt /ahb/spi@1e620000/flash@0 spi-max-frequency
100000000
# fdtget /sys/firmware/fdt /ahb/spi@1e620000/flash@0 spi-max-frequency
100000000

l# ./mtd-stress.sh mtd5 mtd6
22+0 records in
22+0 records out
23068672 bytes (23 MB, 22 MiB) copied, 2.39988 s, 9.6 MB/s
28deb0d7b7ac61a3a748661d17caad9b  /tmp/tmp.F0iA2sCa75
Erasing blocks: 352/352 (100%)
Writing data: 22528k/22528k (100%)
Verifying data: 22528k/22528k (100%)

real    2m51.548s
user    0m0.010s
sys     2m46.316s
28deb0d7b7ac61a3a748661d17caad9b  /dev/mtd5

real    0m2.473s
user    0m0.158s
sys     0m2.286s
64+0 records in
64+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 5.34609 s, 12.6 MB/s
33e2d1b6b58feaf69ae03bce376cbad3  /tmp/tmp.bCJiVeGiSh
Erasing blocks: 1024/1024 (100%)
Writing data: 65536k/65536k (100%)
Verifying data: 65536k/65536k (100%)

real    7m50.545s
user    0m0.200s
sys     7m35.033s
33e2d1b6b58feaf69ae03bce376cbad3  /dev/mtd6

real    0m7.187s
user    0m0.485s
sys     0m6.635s


Do we expect it to take the same amount of time?

>
> > [    0.937639] spi-nor spi1.0: w25q256 (32768 Kbytes)
> > [    1.062246] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
> > [    1.076507] spi-nor spi2.0: gd25q256 (32768 Kbytes)
> > [    1.173951] spi-aspeed-smc 1e631000.spi: CE0 read buswidth:2 [0x203c0741]
> >
> > ./mtd-stress.sh mtd5 mtd6 mtd7 mtd8
>
> A good test would be to read from /dev/mtd0 and reflash the resulting file.
> Keep an external programmer close at hand just in case :)

I did this, while crossing my legs, arms, fingers and toes.

root@apolo:~# ./mtd-stress.sh mtd0
64+0 records in
64+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 5.15611 s, 13.0 MB/s
8a439fdfec504f3e8574c4260d0389ee  /tmp/tmp.kbTNY4G8Qd
Erasing blocks: 1024/1024 (100%)
Writing data: 65536k/65536k (100%)
Verifying data: 5590k/65536k (8%)File does not seem to match flash
data. First mismatch at 0x00573000-0x00575800

real    7m56.061s
user    0m0.050s
sys     7m54.697s
343335c0dc778b95afc83a95307921a7  /dev/mtd0

real    0m7.191s
user    0m0.482s
sys     0m6.597s

Oh no! A failure!

I ran it again and it succeeded. Both tests were with random data. I
wrote to it a third time, this time restoring the original file, and
it succeeded.

Cheers,

Joel

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-03  9:45         ` Joel Stanley
@ 2022-03-03  9:51           ` Cédric Le Goater
  2022-03-03  9:57             ` Joel Stanley
  0 siblings, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-03  9:51 UTC (permalink / raw)
  To: Joel Stanley; +Cc: Ryan Chen, OpenBMC Maillist, Lei Yu, John Wang

On 3/3/22 10:45, Joel Stanley wrote:
> On Wed, 2 Mar 2022 at 05:45, Cédric Le Goater <clg@kaod.org> wrote:
>>
>> On 3/1/22 13:20, Joel Stanley wrote:
> 
>>> [    0.746796] spi-nor spi0.0: w25q512jv (65536 Kbytes)
>>> [    0.808104] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0641]
>>> [    0.862687] spi-nor spi0.1: w25q512jv (65536 Kbytes)
>>> [    0.923991] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0641]
>>
>>
>> On the FMC controller, could you please increase the clock to :
>>
>>          spi-max-frequency = <100000000>;
>>
>> and check the results ?
> 
> +++ b/arch/arm/boot/dts/aspeed-ast2600-evb.dts
> @@ -162,7 +162,7 @@ flash@0 {
>                  status = "okay";
>                  m25p,fast-read;
>                  label = "bmc";
> -               spi-max-frequency = <50000000>;
> +               spi-max-frequency = <100000000>;
>   #include "openbmc-flash-layout-64.dtsi"
>          };
> 
> @@ -170,6 +170,7 @@ flash@1 {
>                  status = "okay";
>                  m25p,fast-read;
>                  label = "alt-bmc";
> +               spi-max-frequency = <100000000>;
>          };
>   };
> 
> 
> 
> # dmesg |grep spi
> [    0.746939] spi-nor spi0.0: w25q512jv (65536 Kbytes)
> [    0.904547] spi-aspeed-smc 1e620000.spi: CE0 read buswidth:2 [0x203c0741]
> [    0.959048] spi-nor spi0.1: w25q512jv (65536 Kbytes)
> [    1.116603] spi-aspeed-smc 1e620000.spi: CE1 read buswidth:2 [0x203c0741]
> [    1.130483] spi-nor spi1.0: w25q256 (32768 Kbytes)
> [    1.255015] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
> [    1.269188] spi-nor spi2.0: gd25q256 (32768 Kbytes)
> [    1.366623] spi-aspeed-smc 1e631000.spi: CE0 read buswidth:2 [0x203c0741]
> 
> # fdtget /sys/firmware/fdt /ahb/spi@1e620000/flash@0 spi-max-frequency
> 100000000
> # fdtget /sys/firmware/fdt /ahb/spi@1e620000/flash@0 spi-max-frequency
> 100000000
> 
> l# ./mtd-stress.sh mtd5 mtd6
> 22+0 records in
> 22+0 records out
> 23068672 bytes (23 MB, 22 MiB) copied, 2.39988 s, 9.6 MB/s
> 28deb0d7b7ac61a3a748661d17caad9b  /tmp/tmp.F0iA2sCa75
> Erasing blocks: 352/352 (100%)
> Writing data: 22528k/22528k (100%)
> Verifying data: 22528k/22528k (100%)
> 
> real    2m51.548s
> user    0m0.010s
> sys     2m46.316s
> 28deb0d7b7ac61a3a748661d17caad9b  /dev/mtd5
> 
> real    0m2.473s
> user    0m0.158s
> sys     0m2.286s
> 64+0 records in
> 64+0 records out
> 67108864 bytes (67 MB, 64 MiB) copied, 5.34609 s, 12.6 MB/s
> 33e2d1b6b58feaf69ae03bce376cbad3  /tmp/tmp.bCJiVeGiSh
> Erasing blocks: 1024/1024 (100%)
> Writing data: 65536k/65536k (100%)
> Verifying data: 65536k/65536k (100%)
> 
> real    7m50.545s
> user    0m0.200s
> sys     7m35.033s
> 33e2d1b6b58feaf69ae03bce376cbad3  /dev/mtd6
> 
> real    0m7.187s
> user    0m0.485s
> sys     0m6.635s
> 
> 
> Do we expect it to take the same amount of time?

There is a nice boost on the reads. Write are the same but that's expected.

> 
>>
>>> [    0.937639] spi-nor spi1.0: w25q256 (32768 Kbytes)
>>> [    1.062246] spi-aspeed-smc 1e630000.spi: CE0 read buswidth:2 [0x203c0741]
>>> [    1.076507] spi-nor spi2.0: gd25q256 (32768 Kbytes)
>>> [    1.173951] spi-aspeed-smc 1e631000.spi: CE0 read buswidth:2 [0x203c0741]
>>>
>>> ./mtd-stress.sh mtd5 mtd6 mtd7 mtd8
>>
>> A good test would be to read from /dev/mtd0 and reflash the resulting file.
>> Keep an external programmer close at hand just in case :)
> 
> I did this, while crossing my legs, arms, fingers and toes.
> 
> root@apolo:~# ./mtd-stress.sh mtd0
> 64+0 records in
> 64+0 records out
> 67108864 bytes (67 MB, 64 MiB) copied, 5.15611 s, 13.0 MB/s
> 8a439fdfec504f3e8574c4260d0389ee  /tmp/tmp.kbTNY4G8Qd
> Erasing blocks: 1024/1024 (100%)
> Writing data: 65536k/65536k (100%)
> Verifying data: 5590k/65536k (8%)File does not seem to match flash
> data. First mismatch at 0x00573000-0x00575800

ouch. we should keep the 50MHz value then.

> real    7m56.061s
> user    0m0.050s
> sys     7m54.697s
> 343335c0dc778b95afc83a95307921a7  /dev/mtd0
> 
> real    0m7.191s
> user    0m0.482s
> sys     0m6.597s
> 
> Oh no! A failure!
> 
> I ran it again and it succeeded. Both tests were with random data. I
> wrote to it a third time, this time restoring the original file, and
> it succeeded.

and did you reboot ? :)

Cheers,

C.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-03  9:51           ` Cédric Le Goater
@ 2022-03-03  9:57             ` Joel Stanley
  0 siblings, 0 replies; 27+ messages in thread
From: Joel Stanley @ 2022-03-03  9:57 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: Ryan Chen, OpenBMC Maillist, Lei Yu, John Wang

On Thu, 3 Mar 2022 at 09:51, Cédric Le Goater <clg@kaod.org> wrote:
> >
> > Oh no! A failure!
> >
> > I ran it again and it succeeded. Both tests were with random data. I
> > wrote to it a third time, this time restoring the original file, and
> > it succeeded.
>
> and did you reboot ? :)
>

Yes. And I've re-flashed cs0 a few times running at 50MHz without issue.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-03  7:02           ` Cédric Le Goater
@ 2022-03-04  7:53             ` Tao Ren
  0 siblings, 0 replies; 27+ messages in thread
From: Tao Ren @ 2022-03-04  7:53 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: OpenBMC Maillist, Lei Yu, Ryan Chen, Joel Stanley

Hi Cedric,

On Thu, Mar 03, 2022 at 08:02:58AM +0100, Cédric Le Goater wrote:
> Hello Tao,
> 
> On 3/3/22 07:03, Tao Ren wrote:
> > Hi Cedric,
> > 
> > The "No good frequency" warning is gone after updating spi-max-frequency
> > to 50MHz in aspeed-g4.dtsi (thanks). I don't see any functional failures,
> 
> Super !
> 
> May be send the "spi-max-frequency" patch ? I can include it in a v3 if a
> resend is needed.

I just sent you the spi-max-frequency patch in a separate email, and I
also tested the patch with both the legacy mtd/spi-nor and new spi-mem
driver.

Could you please include it in v3 (if re-send is needed)? Otherwise I
will send it after the patches are merged (to avoid merge conflicts).

> 
> > but flashcp ran slower compared to the mtd/spi-nor driver(~200 sec vs.
> > ~145 sec when flashcp 32MB data to flash1).
> 
> Interesting, the HW settings should be the same. Was the dynamic debug
> activated ?

Thanks for asking. Dynamic debug was disabled while running flashcp
testing, but I just realized the 2 wedge100 switches are using different
flashes (mx25125635e vs. w25q256), so it doesn't make sense to compare
the performance.

I ran more testing on the same ast2400 machine today, and test shows
spi-mem ran slightly faster than the legacy mtd/spi-nor driver. Let me
reduce the other noises (user space apps eating CPU) and will share you
more data later.

But still, no functional issues observed so far. Thank you again for the
patches.


Cheers,

Tao

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-02  2:28       ` [External] " Lei Yu
@ 2022-03-07  9:41         ` Lei Yu
  2022-03-07 13:06           ` Cédric Le Goater
  0 siblings, 1 reply; 27+ messages in thread
From: Lei Yu @ 2022-03-07  9:41 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Ryan Chen, OpenBMC Maillist, John Wang, Cédric Le Goater

We hit some issues with the new driver, and here is some detailed info.

* Our system (not yet upstreamed) uses `mx66l51235f` as the FMC SPI
flash, and we created a QEMU model.

* When the dts is like "default":
 &fmc {
        pinctrl-names = "default";
        status = "okay";
        flash@0 {
                status = "okay";
                m25p,fast-read;
                label = "bmc";
                spi-max-frequency = <50000000>;
 #include "openbmc-flash-layout-64.dtsi"
        };
 };
1. Run the image in ast2600-evb QEMU, it boots fine;
2. We have a model (g220b) in QEMU that uses mx66l51235f as the fmc
SPI (`amc->fmc_model = "mx66l51235f";`), it boots with below error:
 [    1.848286] vmap allocation for size 268439552 failed: use
vmalloc=<size> to increase size
 [    1.848774] spi-aspeed-smc 1e620000.spi: ioremap failed for
resource [mem 0x20000000-0x2fffffff]
 [    1.849898] spi-aspeed-smc: probe of 1e620000.spi failed with error -12
3. If I manually add vmalloc to the kernel command line (setenv
bootargs 'console=ttyS4,115200n8 root=/dev/ram rw vmalloc=400M'), the
above QEMU model boots fine.
4. On the real system, it behaves the same as QEMU, that I need to add
`vmalloc=400M` to make it boot OK.


* When the dts set `spi-tx-bus-width/spi-rx-bus-width = <4>`, and uses
pinctrl_fwqspid_default from @Joel Stanley's pinctrl patch:
 &fmc {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_fwqspid_default>;
        status = "okay";
        flash@0 {
                status = "okay";
                m25p,fast-read;
                label = "bmc";
                spi-max-frequency = <50000000>;
                spi-tx-bus-width = <4>;
                spi-rx-bus-width = <4>;
 #include "openbmc-flash-layout-64.dtsi"
        };
 };
1. It fails to boot in ast2600-evb QEMU:
 [    0.586654] spi-nor: probe of spi0.0 failed with error -5
 [    0.587654] spi-nor spi0.1: unrecognized JEDEC id bytes: 00 00 00 00 00 00
2. It fails to boot in the g220b model with the same vmalloc failure issue.
2. With `vmalloc=400M`, the g220b model boots fine in QEMU.
3. On the real system, it still fails to boot with `vmalloc=400M` due
to the below error:
 [    0.970091] spi-nor spi0.0: unrecognized JEDEC id bytes: ff ff ff ff ff ff
 [    0.977902] spi-nor: probe of spi0.0 failed with error -2


-- 
BRs,
Lei YU

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-07  9:41         ` Lei Yu
@ 2022-03-07 13:06           ` Cédric Le Goater
  2022-03-08  1:53             ` Lei Yu
  0 siblings, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-07 13:06 UTC (permalink / raw)
  To: Lei Yu, Joel Stanley; +Cc: Ryan Chen, OpenBMC Maillist, John Wang

Hello,

  On 3/7/22 10:41, Lei Yu wrote:
> We hit some issues with the new driver, and here is some detailed info.
> 
> * Our system (not yet upstreamed) uses `mx66l51235f` as the FMC SPI
> flash, and we created a QEMU model.
>
> * When the dts is like "default":
>   &fmc {
>          pinctrl-names = "default";
>          status = "okay";
>          flash@0 {
>                  status = "okay";
>                  m25p,fast-read;
>                  label = "bmc";
>                  spi-max-frequency = <50000000>;
>   #include "openbmc-flash-layout-64.dtsi"
>          };
>   };
> 1. Run the image in ast2600-evb QEMU, it boots fine;
> 2. We have a model (g220b) in QEMU that uses mx66l51235f as the fmc
> SPI (`amc->fmc_model = "mx66l51235f";`), it boots with below error:
>   [    1.848286] vmap allocation for size 268439552 failed: use
> vmalloc=<size> to increase size
>   [    1.848774] spi-aspeed-smc 1e620000.spi: ioremap failed for
> resource [mem 0x20000000-0x2fffffff]
>   [    1.849898] spi-aspeed-smc: probe of 1e620000.spi failed with error -12
> 3. If I manually add vmalloc to the kernel command line (setenv
> bootargs 'console=ttyS4,115200n8 root=/dev/ram rw vmalloc=400M'), the
> above QEMU model boots fine.
> 4. On the real system, it behaves the same as QEMU, that I need to add
> `vmalloc=400M` to make it boot OK.

I don't see why. Is that the same kernel version and config ?

May be check the allocations in

   /proc/vmallocinfo


> * When the dts set `spi-tx-bus-width/spi-rx-bus-width = <4>`, and uses
> pinctrl_fwqspid_default from @Joel Stanley's pinctrl patch:
>   &fmc {
>          pinctrl-names = "default";
>          pinctrl-0 = <&pinctrl_fwqspid_default>;
>          status = "okay";
>          flash@0 {
>                  status = "okay";
>                  m25p,fast-read;
>                  label = "bmc";
>                  spi-max-frequency = <50000000>;
>                  spi-tx-bus-width = <4>;
>                  spi-rx-bus-width = <4>;
>   #include "openbmc-flash-layout-64.dtsi"
>          };
>   };
> 1. It fails to boot in ast2600-evb QEMU:
>   [    0.586654] spi-nor: probe of spi0.0 failed with error -5
>   [    0.587654] spi-nor spi0.1: unrecognized JEDEC id bytes: 00 00 00 00 00 00
> 2. It fails to boot in the g220b model with the same vmalloc failure issue.
> 2. With `vmalloc=400M`, the g220b model boots fine in QEMU.
> 3. On the real system, it still fails to boot with `vmalloc=400M` due
> to the below error:
>   [    0.970091] spi-nor spi0.0: unrecognized JEDEC id bytes: ff ff ff ff ff ff
>   [    0.977902] spi-nor: probe of spi0.0 failed with error -2


I could not make Quad work reliably on HW. This is the next step after the
new driver is merged.

Thanks for tests !

C.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-07 13:06           ` Cédric Le Goater
@ 2022-03-08  1:53             ` Lei Yu
  2022-03-08  9:30               ` Cédric Le Goater
  0 siblings, 1 reply; 27+ messages in thread
From: Lei Yu @ 2022-03-08  1:53 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: Ryan Chen, OpenBMC Maillist, John Wang

On Mon, Mar 7, 2022 at 9:06 PM Cédric Le Goater <clg@kaod.org> wrote:
>
> Hello,
>
>   On 3/7/22 10:41, Lei Yu wrote:
> > We hit some issues with the new driver, and here is some detailed info.
> >
> > * Our system (not yet upstreamed) uses `mx66l51235f` as the FMC SPI
> > flash, and we created a QEMU model.
> >
> > * When the dts is like "default":
> >   &fmc {
> >          pinctrl-names = "default";
> >          status = "okay";
> >          flash@0 {
> >                  status = "okay";
> >                  m25p,fast-read;
> >                  label = "bmc";
> >                  spi-max-frequency = <50000000>;
> >   #include "openbmc-flash-layout-64.dtsi"
> >          };
> >   };
> > 1. Run the image in ast2600-evb QEMU, it boots fine;
> > 2. We have a model (g220b) in QEMU that uses mx66l51235f as the fmc
> > SPI (`amc->fmc_model = "mx66l51235f";`), it boots with below error:
> >   [    1.848286] vmap allocation for size 268439552 failed: use
> > vmalloc=<size> to increase size
> >   [    1.848774] spi-aspeed-smc 1e620000.spi: ioremap failed for
> > resource [mem 0x20000000-0x2fffffff]
> >   [    1.849898] spi-aspeed-smc: probe of 1e620000.spi failed with error -12
> > 3. If I manually add vmalloc to the kernel command line (setenv
> > bootargs 'console=ttyS4,115200n8 root=/dev/ram rw vmalloc=400M'), the
> > above QEMU model boots fine.
> > 4. On the real system, it behaves the same as QEMU, that I need to add
> > `vmalloc=400M` to make it boot OK.
>
> I don't see why. Is that the same kernel version and config ?
>
> May be check the allocations in
>
>    /proc/vmallocinfo

It shows a large area as below:

 0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
phys=0x20000000 ioremap

>
> > * When the dts set `spi-tx-bus-width/spi-rx-bus-width = <4>`, and uses
> > pinctrl_fwqspid_default from @Joel Stanley's pinctrl patch:
> >   &fmc {
> >          pinctrl-names = "default";
> >          pinctrl-0 = <&pinctrl_fwqspid_default>;
> >          status = "okay";
> >          flash@0 {
> >                  status = "okay";
> >                  m25p,fast-read;
> >                  label = "bmc";
> >                  spi-max-frequency = <50000000>;
> >                  spi-tx-bus-width = <4>;
> >                  spi-rx-bus-width = <4>;
> >   #include "openbmc-flash-layout-64.dtsi"
> >          };
> >   };
> > 1. It fails to boot in ast2600-evb QEMU:
> >   [    0.586654] spi-nor: probe of spi0.0 failed with error -5
> >   [    0.587654] spi-nor spi0.1: unrecognized JEDEC id bytes: 00 00 00 00 00 00
> > 2. It fails to boot in the g220b model with the same vmalloc failure issue.
> > 2. With `vmalloc=400M`, the g220b model boots fine in QEMU.
> > 3. On the real system, it still fails to boot with `vmalloc=400M` due
> > to the below error:
> >   [    0.970091] spi-nor spi0.0: unrecognized JEDEC id bytes: ff ff ff ff ff ff
> >   [    0.977902] spi-nor: probe of spi0.0 failed with error -2
>
>
> I could not make Quad work reliably on HW. This is the next step after the
> new driver is merged.

Got it.

>
> Thanks for tests !
>
> C.
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-08  1:53             ` Lei Yu
@ 2022-03-08  9:30               ` Cédric Le Goater
  2022-03-08  9:47                 ` Lei Yu
  0 siblings, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-08  9:30 UTC (permalink / raw)
  To: Lei Yu; +Cc: Ryan Chen, OpenBMC Maillist, John Wang

Hello Lei,

On 3/8/22 02:53, Lei Yu wrote:
> On Mon, Mar 7, 2022 at 9:06 PM Cédric Le Goater <clg@kaod.org> wrote:
>>
>> Hello,
>>
>>    On 3/7/22 10:41, Lei Yu wrote:
>>> We hit some issues with the new driver, and here is some detailed info.
>>>
>>> * Our system (not yet upstreamed) uses `mx66l51235f` as the FMC SPI
>>> flash, and we created a QEMU model.
>>>
>>> * When the dts is like "default":
>>>    &fmc {
>>>           pinctrl-names = "default";
>>>           status = "okay";
>>>           flash@0 {
>>>                   status = "okay";
>>>                   m25p,fast-read;
>>>                   label = "bmc";
>>>                   spi-max-frequency = <50000000>;
>>>    #include "openbmc-flash-layout-64.dtsi"
>>>           };
>>>    };
>>> 1. Run the image in ast2600-evb QEMU, it boots fine;
>>> 2. We have a model (g220b) in QEMU that uses mx66l51235f as the fmc
>>> SPI (`amc->fmc_model = "mx66l51235f";`), it boots with below error:
>>>    [    1.848286] vmap allocation for size 268439552 failed: use
>>> vmalloc=<size> to increase size
>>>    [    1.848774] spi-aspeed-smc 1e620000.spi: ioremap failed for
>>> resource [mem 0x20000000-0x2fffffff]
>>>    [    1.849898] spi-aspeed-smc: probe of 1e620000.spi failed with error -12
>>> 3. If I manually add vmalloc to the kernel command line (setenv
>>> bootargs 'console=ttyS4,115200n8 root=/dev/ram rw vmalloc=400M'), the
>>> above QEMU model boots fine.
>>> 4. On the real system, it behaves the same as QEMU, that I need to add
>>> `vmalloc=400M` to make it boot OK.
>>
>> I don't see why. Is that the same kernel version and config ?
>>
>> May be check the allocations in
>>
>>     /proc/vmallocinfo
> 
> It shows a large area as below:
> 
>   0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
> phys=0x20000000 ioremap

Is CONFIG_VMSPLIT_2G set ?

> 
>>
>>> * When the dts set `spi-tx-bus-width/spi-rx-bus-width = <4>`, and uses
>>> pinctrl_fwqspid_default from @Joel Stanley's pinctrl patch:
>>>    &fmc {
>>>           pinctrl-names = "default";
>>>           pinctrl-0 = <&pinctrl_fwqspid_default>;
>>>           status = "okay";
>>>           flash@0 {
>>>                   status = "okay";
>>>                   m25p,fast-read;
>>>                   label = "bmc";
>>>                   spi-max-frequency = <50000000>;
>>>                   spi-tx-bus-width = <4>;
>>>                   spi-rx-bus-width = <4>;
>>>    #include "openbmc-flash-layout-64.dtsi"
>>>           };
>>>    };
>>> 1. It fails to boot in ast2600-evb QEMU:
>>>    [    0.586654] spi-nor: probe of spi0.0 failed with error -5
>>>    [    0.587654] spi-nor spi0.1: unrecognized JEDEC id bytes: 00 00 00 00 00 00
>>> 2. It fails to boot in the g220b model with the same vmalloc failure issue.
>>> 2. With `vmalloc=400M`, the g220b model boots fine in QEMU.
>>> 3. On the real system, it still fails to boot with `vmalloc=400M` due
>>> to the below error:
>>>    [    0.970091] spi-nor spi0.0: unrecognized JEDEC id bytes: ff ff ff ff ff ff
>>>    [    0.977902] spi-nor: probe of spi0.0 failed with error -2
>>
>>
>> I could not make Quad work reliably on HW. This is the next step after the
>> new driver is merged.
> 
> Got it.

People are looking into it. When fixed, activating Quad should only be
a DT change.

Thanks,

C.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-08  9:30               ` Cédric Le Goater
@ 2022-03-08  9:47                 ` Lei Yu
  2022-03-08 14:57                   ` Cédric Le Goater
  0 siblings, 1 reply; 27+ messages in thread
From: Lei Yu @ 2022-03-08  9:47 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: Ryan Chen, OpenBMC Maillist, John Wang

On Tue, Mar 8, 2022 at 5:30 PM Cédric Le Goater <clg@kaod.org> wrote:
>
> Hello Lei,
>
> On 3/8/22 02:53, Lei Yu wrote:
> > On Mon, Mar 7, 2022 at 9:06 PM Cédric Le Goater <clg@kaod.org> wrote:
> >>
> >> Hello,
> >>
> >>    On 3/7/22 10:41, Lei Yu wrote:
> >>> We hit some issues with the new driver, and here is some detailed info.
> >>>
> >>> * Our system (not yet upstreamed) uses `mx66l51235f` as the FMC SPI
> >>> flash, and we created a QEMU model.
> >>>
> >>> * When the dts is like "default":
> >>>    &fmc {
> >>>           pinctrl-names = "default";
> >>>           status = "okay";
> >>>           flash@0 {
> >>>                   status = "okay";
> >>>                   m25p,fast-read;
> >>>                   label = "bmc";
> >>>                   spi-max-frequency = <50000000>;
> >>>    #include "openbmc-flash-layout-64.dtsi"
> >>>           };
> >>>    };
> >>> 1. Run the image in ast2600-evb QEMU, it boots fine;
> >>> 2. We have a model (g220b) in QEMU that uses mx66l51235f as the fmc
> >>> SPI (`amc->fmc_model = "mx66l51235f";`), it boots with below error:
> >>>    [    1.848286] vmap allocation for size 268439552 failed: use
> >>> vmalloc=<size> to increase size
> >>>    [    1.848774] spi-aspeed-smc 1e620000.spi: ioremap failed for
> >>> resource [mem 0x20000000-0x2fffffff]
> >>>    [    1.849898] spi-aspeed-smc: probe of 1e620000.spi failed with error -12
> >>> 3. If I manually add vmalloc to the kernel command line (setenv
> >>> bootargs 'console=ttyS4,115200n8 root=/dev/ram rw vmalloc=400M'), the
> >>> above QEMU model boots fine.
> >>> 4. On the real system, it behaves the same as QEMU, that I need to add
> >>> `vmalloc=400M` to make it boot OK.
> >>
> >> I don't see why. Is that the same kernel version and config ?
> >>
> >> May be check the allocations in
> >>
> >>     /proc/vmallocinfo
> >
> > It shows a large area as below:
> >
> >   0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
> > phys=0x20000000 ioremap
>
> Is CONFIG_VMSPLIT_2G set ?

Yes, it's enabled in aspeed-g6/defconfig

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-08  9:47                 ` Lei Yu
@ 2022-03-08 14:57                   ` Cédric Le Goater
  2022-03-09  1:58                     ` Lei Yu
  0 siblings, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-08 14:57 UTC (permalink / raw)
  To: Lei Yu; +Cc: Ryan Chen, OpenBMC Maillist, John Wang

On 3/8/22 10:47, Lei Yu wrote:
> On Tue, Mar 8, 2022 at 5:30 PM Cédric Le Goater <clg@kaod.org> wrote:
>>
>> Hello Lei,
>>
>> On 3/8/22 02:53, Lei Yu wrote:
>>> On Mon, Mar 7, 2022 at 9:06 PM Cédric Le Goater <clg@kaod.org> wrote:
>>>>
>>>> Hello,
>>>>
>>>>     On 3/7/22 10:41, Lei Yu wrote:
>>>>> We hit some issues with the new driver, and here is some detailed info.
>>>>>
>>>>> * Our system (not yet upstreamed) uses `mx66l51235f` as the FMC SPI
>>>>> flash, and we created a QEMU model.
>>>>>
>>>>> * When the dts is like "default":
>>>>>     &fmc {
>>>>>            pinctrl-names = "default";
>>>>>            status = "okay";
>>>>>            flash@0 {
>>>>>                    status = "okay";
>>>>>                    m25p,fast-read;
>>>>>                    label = "bmc";
>>>>>                    spi-max-frequency = <50000000>;
>>>>>     #include "openbmc-flash-layout-64.dtsi"
>>>>>            };
>>>>>     };
>>>>> 1. Run the image in ast2600-evb QEMU, it boots fine;
>>>>> 2. We have a model (g220b) in QEMU that uses mx66l51235f as the fmc
>>>>> SPI (`amc->fmc_model = "mx66l51235f";`), it boots with below error:
>>>>>     [    1.848286] vmap allocation for size 268439552 failed: use
>>>>> vmalloc=<size> to increase size
>>>>>     [    1.848774] spi-aspeed-smc 1e620000.spi: ioremap failed for
>>>>> resource [mem 0x20000000-0x2fffffff]
>>>>>     [    1.849898] spi-aspeed-smc: probe of 1e620000.spi failed with error -12
>>>>> 3. If I manually add vmalloc to the kernel command line (setenv
>>>>> bootargs 'console=ttyS4,115200n8 root=/dev/ram rw vmalloc=400M'), the
>>>>> above QEMU model boots fine.
>>>>> 4. On the real system, it behaves the same as QEMU, that I need to add
>>>>> `vmalloc=400M` to make it boot OK.
>>>>
>>>> I don't see why. Is that the same kernel version and config ?
>>>>
>>>> May be check the allocations in
>>>>
>>>>      /proc/vmallocinfo
>>>
>>> It shows a large area as below:
>>>
>>>    0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
>>> phys=0x20000000 ioremap
>>
>> Is CONFIG_VMSPLIT_2G set ?
> 
> Yes, it's enabled in aspeed-g6/defconfig

The OpenBMC tree only has a aspeed_g5_defconfig.

How much RAM do you have ? Could check the totals in meminfo ?

Thanks,

C.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-08 14:57                   ` Cédric Le Goater
@ 2022-03-09  1:58                     ` Lei Yu
  2022-03-09  7:40                       ` Cédric Le Goater
  0 siblings, 1 reply; 27+ messages in thread
From: Lei Yu @ 2022-03-09  1:58 UTC (permalink / raw)
  To: Cédric Le Goater; +Cc: Ryan Chen, OpenBMC Maillist, John Wang

> >>>>
> >>>> I don't see why. Is that the same kernel version and config ?
> >>>>
> >>>> May be check the allocations in
> >>>>
> >>>>      /proc/vmallocinfo
> >>>
> >>> It shows a large area as below:
> >>>
> >>>    0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
> >>> phys=0x20000000 ioremap
> >>
> >> Is CONFIG_VMSPLIT_2G set ?
> >
> > Yes, it's enabled in aspeed-g6/defconfig
>
> The OpenBMC tree only has a aspeed_g5_defconfig.

It does have aspeed-g6/defconfig and CONFIG_VMSPLIT_2G is enabled:
https://github.com/openbmc/openbmc/blob/master/meta-aspeed/recipes-kernel/linux/linux-aspeed/aspeed-g6/defconfig#L33

>
> How much RAM do you have ? Could check the totals in meminfo ?

Our system (and QEMU model) has 2GiB.

Boot with `vmalloc=500M`:
# cat /proc/meminfo
MemTotal:        1984880 kB
MemFree:         1860700 kB
MemAvailable:    1882116 kB
Buffers:               0 kB
Cached:            63796 kB
SwapCached:            0 kB
Active:            13728 kB
Inactive:          71988 kB
Active(anon):        340 kB
Inactive(anon):    37012 kB
Active(file):      13388 kB
Inactive(file):    34976 kB
Unevictable:        3624 kB
Mlocked:               0 kB
HighTotal:        446464 kB
HighFree:         353148 kB
LowTotal:        1538416 kB
LowFree:         1507552 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         25600 kB
Mapped:            40356 kB
Shmem:             11804 kB
KReclaimable:       7712 kB
Slab:              17944 kB
SReclaimable:       7712 kB
SUnreclaim:        10232 kB
KernelStack:         872 kB
PageTables:         2080 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      992440 kB
Committed_AS:     105768 kB
VmallocTotal:     516096 kB
VmallocUsed:        2436 kB
VmallocChunk:          0 kB
Percpu:              232 kB
CmaTotal:          65536 kB
CmaFree:           65052 kB

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-09  1:58                     ` Lei Yu
@ 2022-03-09  7:40                       ` Cédric Le Goater
  2022-03-09  7:50                         ` Cédric Le Goater
  0 siblings, 1 reply; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-09  7:40 UTC (permalink / raw)
  To: Lei Yu; +Cc: Ryan Chen, OpenBMC Maillist, John Wang, Joel Stanley

On 3/9/22 02:58, Lei Yu wrote:
>>>>>>
>>>>>> I don't see why. Is that the same kernel version and config ?
>>>>>>
>>>>>> May be check the allocations in
>>>>>>
>>>>>>       /proc/vmallocinfo
>>>>>
>>>>> It shows a large area as below:
>>>>>
>>>>>     0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
>>>>> phys=0x20000000 ioremap
>>>>
>>>> Is CONFIG_VMSPLIT_2G set ?
>>>
>>> Yes, it's enabled in aspeed-g6/defconfig
>>
>> The OpenBMC tree only has a aspeed_g5_defconfig.
> 
> It does have aspeed-g6/defconfig and CONFIG_VMSPLIT_2G is enabled:
> https://github.com/openbmc/openbmc/blob/master/meta-aspeed/recipes-kernel/linux/linux-aspeed/aspeed-g6/defconfig#L33

ok. I was referring to the default configs in the kernel tree.
That's fine.

>>
>> How much RAM do you have ? Could check the totals in meminfo ?
> 
> Our system (and QEMU model) has 2GiB.

ah. you changed the default. Here is why we didn't merge the AST2600
with 2GB :

   https://lists.nongnu.org/archive/html/qemu-devel/2019-10/msg03903.html

> 
> Boot with `vmalloc=500M`:
> # cat /proc/meminfo
> MemTotal:        1984880 kB
> MemFree:         1860700 kB
> MemAvailable:    1882116 kB

That's the reason. The vmalloc area size is in direct relation with
the available RAM. See the ARM memory layout :

   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/memory.rst

May be we should consider 64-bit kernel one day.

Thanks,

C.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: Call for testing: spi-mem driver for Aspeed SMC controllers
  2022-03-09  7:40                       ` Cédric Le Goater
@ 2022-03-09  7:50                         ` Cédric Le Goater
  0 siblings, 0 replies; 27+ messages in thread
From: Cédric Le Goater @ 2022-03-09  7:50 UTC (permalink / raw)
  To: Lei Yu; +Cc: John Wang, OpenBMC Maillist, Ryan Chen, Joel Stanley

On 3/9/22 08:40, Cédric Le Goater wrote:
> On 3/9/22 02:58, Lei Yu wrote:
>>>>>>>
>>>>>>> I don't see why. Is that the same kernel version and config ?
>>>>>>>
>>>>>>> May be check the allocations in
>>>>>>>
>>>>>>>       /proc/vmallocinfo
>>>>>>
>>>>>> It shows a large area as below:
>>>>>>
>>>>>>     0xc1d30472-0x406b4a0c 268439552 __devm_ioremap_resource+0x178/0x1f0
>>>>>> phys=0x20000000 ioremap
>>>>>
>>>>> Is CONFIG_VMSPLIT_2G set ?
>>>>
>>>> Yes, it's enabled in aspeed-g6/defconfig
>>>
>>> The OpenBMC tree only has a aspeed_g5_defconfig.
>>
>> It does have aspeed-g6/defconfig and CONFIG_VMSPLIT_2G is enabled:
>> https://github.com/openbmc/openbmc/blob/master/meta-aspeed/recipes-kernel/linux/linux-aspeed/aspeed-g6/defconfig#L33
> 
> ok. I was referring to the default configs in the kernel tree.
> That's fine.
> 
>>>
>>> How much RAM do you have ? Could check the totals in meminfo ?
>>
>> Our system (and QEMU model) has 2GiB.
> 
> ah. you changed the default. Here is why we didn't merge the AST2600
> with 2GB :
> 
>    https://lists.nongnu.org/archive/html/qemu-devel/2019-10/msg03903.html
> 
>>
>> Boot with `vmalloc=500M`:
>> # cat /proc/meminfo
>> MemTotal:        1984880 kB
>> MemFree:         1860700 kB
>> MemAvailable:    1882116 kB
> 
> That's the reason. The vmalloc area size is in direct relation with
> the available RAM. See the ARM memory layout :
> 
>    https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/memory.rst
> 
> May be we should consider 64-bit kernel one day.

No. We can't. It's a ARM A7 32-bit. Next Generation then.

C.

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2022-03-09  7:51 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20220214094231.3753686-1-clg@kaod.org>
2022-02-25  5:29 ` Call for testing: spi-mem driver for Aspeed SMC controllers Joel Stanley
2022-02-27 18:53   ` Cédric Le Goater
2022-02-28  6:30     ` Tao Ren
2022-03-02  6:05     ` Tao Ren
2022-03-02  6:23       ` Cédric Le Goater
2022-03-02  6:47         ` Tao Ren
2022-03-03  6:03         ` Tao Ren
2022-03-03  7:02           ` Cédric Le Goater
2022-03-04  7:53             ` Tao Ren
2022-03-01  9:57   ` John Wang
2022-03-01 10:25     ` Cédric Le Goater
2022-03-02  2:47       ` John Wang
2022-03-01 12:20     ` Joel Stanley
2022-03-02  2:28       ` [External] " Lei Yu
2022-03-07  9:41         ` Lei Yu
2022-03-07 13:06           ` Cédric Le Goater
2022-03-08  1:53             ` Lei Yu
2022-03-08  9:30               ` Cédric Le Goater
2022-03-08  9:47                 ` Lei Yu
2022-03-08 14:57                   ` Cédric Le Goater
2022-03-09  1:58                     ` Lei Yu
2022-03-09  7:40                       ` Cédric Le Goater
2022-03-09  7:50                         ` Cédric Le Goater
2022-03-02  5:45       ` Cédric Le Goater
2022-03-03  9:45         ` Joel Stanley
2022-03-03  9:51           ` Cédric Le Goater
2022-03-03  9:57             ` Joel Stanley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).