* [PATCH 0/2] Add MPFS CPU Implementation
@ 2025-11-19 12:38 Jamie Gibbons
2025-11-19 12:38 ` [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC Jamie Gibbons
2025-11-19 12:38 ` [PATCH 2/2] riscv: mpfs: move SoC level options to the CPU Kconfig Jamie Gibbons
0 siblings, 2 replies; 6+ messages in thread
From: Jamie Gibbons @ 2025-11-19 12:38 UTC (permalink / raw)
To: u-boot
Cc: Conor Dooley, Valentina Fernandez Alanis, Tom Rini, Leo,
Rick Chen, Yao Zi, Junhui Liu, jamie.gibbons
Hi all,
The following series creates a custom CPU implementation for Microchip's
PolarFire SoC as it needs a custom implementation of top_of_ram().
Since there are multiple boards that use the PolarFire SoC, some kconfigs that
are determined at a CPU level are moved from the board kconfigs.
Thanks
Jamie.
Conor Dooley (2):
riscv: create a custom CPU implementation for PolarFire SoC
riscv: mpfs: move SoC level options to the CPU Kconfig
arch/riscv/Kconfig | 1 +
arch/riscv/cpu/mpfs/Kconfig | 33 ++++++++++++++++++++++
arch/riscv/cpu/mpfs/Makefile | 6 ++++
arch/riscv/cpu/mpfs/cpu.c | 22 +++++++++++++++
arch/riscv/cpu/mpfs/dram.c | 38 ++++++++++++++++++++++++++
arch/riscv/include/asm/arch-mpfs/clk.h | 8 ++++++
board/microchip/mpfs_generic/Kconfig | 24 ++--------------
7 files changed, 110 insertions(+), 22 deletions(-)
create mode 100644 arch/riscv/cpu/mpfs/Kconfig
create mode 100644 arch/riscv/cpu/mpfs/Makefile
create mode 100644 arch/riscv/cpu/mpfs/cpu.c
create mode 100644 arch/riscv/cpu/mpfs/dram.c
create mode 100644 arch/riscv/include/asm/arch-mpfs/clk.h
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC
2025-11-19 12:38 [PATCH 0/2] Add MPFS CPU Implementation Jamie Gibbons
@ 2025-11-19 12:38 ` Jamie Gibbons
2025-12-04 7:45 ` Leo Liang
2025-11-19 12:38 ` [PATCH 2/2] riscv: mpfs: move SoC level options to the CPU Kconfig Jamie Gibbons
1 sibling, 1 reply; 6+ messages in thread
From: Jamie Gibbons @ 2025-11-19 12:38 UTC (permalink / raw)
To: u-boot
Cc: Conor Dooley, Valentina Fernandez Alanis, Tom Rini, Leo,
Rick Chen, Yao Zi, Junhui Liu, jamie.gibbons
From: Conor Dooley <conor.dooley@microchip.com>
PolarFire SoC needs a custom implementation of top_of_ram(), so stop
using the generic CPU & create a custom CPU instead.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
arch/riscv/Kconfig | 1 +
arch/riscv/cpu/mpfs/Kconfig | 16 +++++++++++
arch/riscv/cpu/mpfs/Makefile | 6 ++++
arch/riscv/cpu/mpfs/cpu.c | 22 +++++++++++++++
arch/riscv/cpu/mpfs/dram.c | 38 ++++++++++++++++++++++++++
arch/riscv/include/asm/arch-mpfs/clk.h | 8 ++++++
board/microchip/mpfs_generic/Kconfig | 4 +--
7 files changed, 93 insertions(+), 2 deletions(-)
create mode 100644 arch/riscv/cpu/mpfs/Kconfig
create mode 100644 arch/riscv/cpu/mpfs/Makefile
create mode 100644 arch/riscv/cpu/mpfs/cpu.c
create mode 100644 arch/riscv/cpu/mpfs/dram.c
create mode 100644 arch/riscv/include/asm/arch-mpfs/clk.h
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 265b5320777..79867656b15 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -126,6 +126,7 @@ source "arch/riscv/cpu/cv1800b/Kconfig"
source "arch/riscv/cpu/fu540/Kconfig"
source "arch/riscv/cpu/fu740/Kconfig"
source "arch/riscv/cpu/ast2700/Kconfig"
+source "arch/riscv/cpu/mpfs/Kconfig"
source "arch/riscv/cpu/generic/Kconfig"
source "arch/riscv/cpu/jh7110/Kconfig"
source "arch/riscv/cpu/k1/Kconfig"
diff --git a/arch/riscv/cpu/mpfs/Kconfig b/arch/riscv/cpu/mpfs/Kconfig
new file mode 100644
index 00000000000..3e99c1aae38
--- /dev/null
+++ b/arch/riscv/cpu/mpfs/Kconfig
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+config MICROCHIP_MPFS
+ bool
+ select ARCH_EARLY_INIT_R
+ imply CPU
+ imply CPU_RISCV
+ imply RISCV_TIMER if (RISCV_SMODE || SPL_RISCV_SMODE)
+ imply SIFIVE_CLINT if RISCV_MMODE
+ imply SPL_SIFIVE_CLINT if SPL_RISCV_MMODE
+ imply CMD_CPU
+ imply SPL_CPU
+ imply SPL_OPENSBI
+ imply SPL_LOAD_FIT
+ imply REGMAP
+ imply SYSCON
diff --git a/arch/riscv/cpu/mpfs/Makefile b/arch/riscv/cpu/mpfs/Makefile
new file mode 100644
index 00000000000..c4bf2b4c292
--- /dev/null
+++ b/arch/riscv/cpu/mpfs/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+ifneq ($(CONFIG_SPL_BUILD),y)
+obj-y += dram.o
+obj-y += cpu.o
+endif
diff --git a/arch/riscv/cpu/mpfs/cpu.c b/arch/riscv/cpu/mpfs/cpu.c
new file mode 100644
index 00000000000..f13c18942f3
--- /dev/null
+++ b/arch/riscv/cpu/mpfs/cpu.c
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
+ */
+
+#include <irq_func.h>
+#include <asm/cache.h>
+
+/*
+ * cleanup_before_linux() is called just before we call linux
+ * it prepares the processor for linux
+ *
+ * we disable interrupt and caches.
+ */
+int cleanup_before_linux(void)
+{
+ disable_interrupts();
+
+ cache_flush();
+
+ return 0;
+}
diff --git a/arch/riscv/cpu/mpfs/dram.c b/arch/riscv/cpu/mpfs/dram.c
new file mode 100644
index 00000000000..4398d3e36c8
--- /dev/null
+++ b/arch/riscv/cpu/mpfs/dram.c
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
+ */
+
+#include <asm/global_data.h>
+#include <fdtdec.h>
+#include <init.h>
+#include <linux/sizes.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define MPFS_TOP_OF_CACHED (SZ_2G + SZ_1G)
+#define MPFS_HSS_RESERVATION (SZ_4M)
+
+int dram_init(void) {
+ return fdtdec_setup_mem_size_base();
+}
+
+int dram_init_banksize(void) {
+ return fdtdec_setup_memory_banksize();
+}
+
+phys_size_t board_get_usable_ram_top(phys_size_t total_size) {
+ /*
+ * Ensure that if we run from 32-bit memory that all memory used by
+ * U-Boot is cached addresses, but also account for the reservation at
+ * the top of 32 bit cached DDR used by the HSS.
+ */
+ if (gd->ram_top >= MPFS_TOP_OF_CACHED - MPFS_HSS_RESERVATION)
+ return MPFS_TOP_OF_CACHED - MPFS_HSS_RESERVATION - 1;
+ /*
+ * If we don't find a 32 bit region just return the top of memory.
+ * If the address is a 32-bit region, but fits beneath the HSS'
+ * reservation, ram_top is adequate also.
+ */
+ return gd->ram_top;
+}
\ No newline at end of file
diff --git a/arch/riscv/include/asm/arch-mpfs/clk.h b/arch/riscv/include/asm/arch-mpfs/clk.h
new file mode 100644
index 00000000000..fbb1399f3c8
--- /dev/null
+++ b/arch/riscv/include/asm/arch-mpfs/clk.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+
+#ifndef __ASM_RISCV_ARCH_MPFS_CLK_H
+#define __ASM_RISCV_ARCH_MPFS_CLK_H
+
+/* Note: This is a placeholder header for driver compilation. */
+
+#endif
diff --git a/board/microchip/mpfs_generic/Kconfig b/board/microchip/mpfs_generic/Kconfig
index 8dcf55a0311..49663a4c562 100644
--- a/board/microchip/mpfs_generic/Kconfig
+++ b/board/microchip/mpfs_generic/Kconfig
@@ -7,7 +7,7 @@ config SYS_VENDOR
default "microchip"
config SYS_CPU
- default "generic"
+ default "mpfs"
config SYS_CONFIG_NAME
default "microchip_mpfs_generic"
@@ -18,7 +18,7 @@ config TEXT_BASE
config BOARD_SPECIFIC_OPTIONS # dummy
def_bool y
- select GENERIC_RISCV
+ select MICROCHIP_MPFS
select BOARD_EARLY_INIT_F
select BOARD_LATE_INIT
imply SMP
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] riscv: mpfs: move SoC level options to the CPU Kconfig
2025-11-19 12:38 [PATCH 0/2] Add MPFS CPU Implementation Jamie Gibbons
2025-11-19 12:38 ` [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC Jamie Gibbons
@ 2025-11-19 12:38 ` Jamie Gibbons
1 sibling, 0 replies; 6+ messages in thread
From: Jamie Gibbons @ 2025-11-19 12:38 UTC (permalink / raw)
To: u-boot
Cc: Conor Dooley, Valentina Fernandez Alanis, Tom Rini, Leo,
Rick Chen, Yao Zi, Junhui Liu, jamie.gibbons
From: Conor Dooley <conor.dooley@microchip.com>
There are multiple boards that use the PolarFire SoC, so extract
the Kconfig sections that are determined at a CPU level from the board
Kconfigs now that we have a CPU Kconfig.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
arch/riscv/cpu/mpfs/Kconfig | 17 +++++++++++++++++
board/microchip/mpfs_generic/Kconfig | 20 --------------------
2 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/arch/riscv/cpu/mpfs/Kconfig b/arch/riscv/cpu/mpfs/Kconfig
index 3e99c1aae38..bcf1ede818b 100644
--- a/arch/riscv/cpu/mpfs/Kconfig
+++ b/arch/riscv/cpu/mpfs/Kconfig
@@ -14,3 +14,20 @@ config MICROCHIP_MPFS
imply SPL_LOAD_FIT
imply REGMAP
imply SYSCON
+ imply CLK_CCF
+ imply CLK_MPFS
+ imply SYS_NS16550
+ imply MACB
+ imply MII
+ imply CMD_I2C
+ imply DM_I2C
+ imply SYS_I2C_MICROCHIP
+ imply MMC
+ imply MMC_WRITE
+ imply MMC_SDHCI
+ imply MMC_SDHCI_CADENCE
+ imply MMC_SDHCI_ADMA
+ imply MMC_HS200_SUPPORT
+ imply SPI
+ imply DM_SPI
+ imply MICROCHIP_QSPI
diff --git a/board/microchip/mpfs_generic/Kconfig b/board/microchip/mpfs_generic/Kconfig
index 49663a4c562..d38e56c742d 100644
--- a/board/microchip/mpfs_generic/Kconfig
+++ b/board/microchip/mpfs_generic/Kconfig
@@ -22,11 +22,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select BOARD_EARLY_INIT_F
select BOARD_LATE_INIT
imply SMP
- imply CLK_CCF
- imply CLK_MPFS
- imply REGMAP
- imply SYSCON
- imply SYS_NS16550
imply CMD_DHCP
imply CMD_EXT2
imply CMD_EXT4
@@ -39,23 +34,8 @@ config BOARD_SPECIFIC_OPTIONS # dummy
imply EFI_PARTITION
imply IP_DYN
imply ISO_PARTITION
- imply MACB
- imply MII
imply PHY_LIB
imply PHY_VITESSE
- imply MMC
- imply MMC_WRITE
- imply MMC_SDHCI
- imply MMC_SDHCI_CADENCE
- imply MMC_SDHCI_ADMA
- imply MMC_HS200_SUPPORT
- imply CMD_I2C
- imply DM_I2C
- imply SYS_I2C_MICROCHIP
- imply MTD
- imply SPI
- imply DM_SPI
- imply MICROCHIP_COREQSPI
imply MTD_SPI_NAND
imply CMD_MTD
imply CMD_MTDPARTS
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC
2025-11-19 12:38 ` [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC Jamie Gibbons
@ 2025-12-04 7:45 ` Leo Liang
2025-12-08 12:10 ` Jamie.Gibbons
0 siblings, 1 reply; 6+ messages in thread
From: Leo Liang @ 2025-12-04 7:45 UTC (permalink / raw)
To: Jamie Gibbons
Cc: u-boot, Conor Dooley, Valentina Fernandez Alanis, Tom Rini,
Rick Chen, Yao Zi, Junhui Liu
Hi Jamie,
On Wed, Nov 19, 2025 at 12:38:42PM +0000, Jamie Gibbons wrote:
> [EXTERNAL MAIL]
>
> From: Conor Dooley <conor.dooley@microchip.com>
>
> PolarFire SoC needs a custom implementation of top_of_ram(), so stop
> using the generic CPU & create a custom CPU instead.
>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> arch/riscv/Kconfig | 1 +
> arch/riscv/cpu/mpfs/Kconfig | 16 +++++++++++
> arch/riscv/cpu/mpfs/Makefile | 6 ++++
> arch/riscv/cpu/mpfs/cpu.c | 22 +++++++++++++++
> arch/riscv/cpu/mpfs/dram.c | 38 ++++++++++++++++++++++++++
> arch/riscv/include/asm/arch-mpfs/clk.h | 8 ++++++
> board/microchip/mpfs_generic/Kconfig | 4 +--
> 7 files changed, 93 insertions(+), 2 deletions(-)
> create mode 100644 arch/riscv/cpu/mpfs/Kconfig
> create mode 100644 arch/riscv/cpu/mpfs/Makefile
> create mode 100644 arch/riscv/cpu/mpfs/cpu.c
The cpu.c file only contains "cleanup_before_linux" and seems identical
with the one provided in arch/riscv/cpu/generic/cpu.c.
Other than that, LGTM.
If you don't mind, I could fix this on my side that you don't need to
resend the patchset again.
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC
2025-12-04 7:45 ` Leo Liang
@ 2025-12-08 12:10 ` Jamie.Gibbons
2025-12-09 3:17 ` Leo Liang
0 siblings, 1 reply; 6+ messages in thread
From: Jamie.Gibbons @ 2025-12-08 12:10 UTC (permalink / raw)
To: ycliang
Cc: ziyao, u-boot, trini, Conor.Dooley, Valentina.FernandezAlanis,
junhui.liu, rick
Hi Leo,
On Thu, 2025-12-04 at 15:45 +0800, Leo Liang wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know
> the content is safe
>
> Hi Jamie,
>
> On Wed, Nov 19, 2025 at 12:38:42PM +0000, Jamie Gibbons wrote:
> > [EXTERNAL MAIL]
> >
> > From: Conor Dooley <conor.dooley@microchip.com>
> >
> > PolarFire SoC needs a custom implementation of top_of_ram(), so stop
> > using the generic CPU & create a custom CPU instead.
> >
> > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > ---
> > arch/riscv/Kconfig | 1 +
> > arch/riscv/cpu/mpfs/Kconfig | 16 +++++++++++
> > arch/riscv/cpu/mpfs/Makefile | 6 ++++
> > arch/riscv/cpu/mpfs/cpu.c | 22 +++++++++++++++
> > arch/riscv/cpu/mpfs/dram.c | 38
> > ++++++++++++++++++++++++++
> > arch/riscv/include/asm/arch-mpfs/clk.h | 8 ++++++
> > board/microchip/mpfs_generic/Kconfig | 4 +--
> > 7 files changed, 93 insertions(+), 2 deletions(-)
> > create mode 100644 arch/riscv/cpu/mpfs/Kconfig
> > create mode 100644 arch/riscv/cpu/mpfs/Makefile
> > create mode 100644 arch/riscv/cpu/mpfs/cpu.c
>
> The cpu.c file only contains "cleanup_before_linux" and seems
> identical
> with the one provided in arch/riscv/cpu/generic/cpu.c.
>
> Other than that, LGTM.
>
> If you don't mind, I could fix this on my side that you don't need to
> resend the patchset again.
>
> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
Thank you for your response, review and feedback.
Regarding 'mpfs/cpu.c', you're corect that it is currently identical to
the generic implementation. Our intent was to provide a placeholder for
any future Polarfire-specific logic and also assumed it was manditory,
but if duplication is unneccessary, I'm happy for you to adjust as you
see fit.
In other words, if U-Boot prefers to avoid duplication and this file is
not mandatory for build or architextural reasons per CPU implementation,
than please go ahead and use the generic version.
Thanks,
Jamie.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC
2025-12-08 12:10 ` Jamie.Gibbons
@ 2025-12-09 3:17 ` Leo Liang
0 siblings, 0 replies; 6+ messages in thread
From: Leo Liang @ 2025-12-09 3:17 UTC (permalink / raw)
To: Jamie.Gibbons
Cc: ziyao, u-boot, trini, Conor.Dooley, Valentina.FernandezAlanis,
junhui.liu, rick
Hi Jamie,
On Mon, Dec 08, 2025 at 12:10:28PM +0000, Jamie.Gibbons@microchip.com wrote:
> [EXTERNAL MAIL]
>
> Hi Leo,
>
> On Thu, 2025-12-04 at 15:45 +0800, Leo Liang wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know
> > the content is safe
> >
> > Hi Jamie,
> >
> > On Wed, Nov 19, 2025 at 12:38:42PM +0000, Jamie Gibbons wrote:
> > > [EXTERNAL MAIL]
> > >
> > > From: Conor Dooley <conor.dooley@microchip.com>
> > >
> > > PolarFire SoC needs a custom implementation of top_of_ram(), so stop
> > > using the generic CPU & create a custom CPU instead.
> > >
> > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > > ---
> > > arch/riscv/Kconfig | 1 +
> > > arch/riscv/cpu/mpfs/Kconfig | 16 +++++++++++
> > > arch/riscv/cpu/mpfs/Makefile | 6 ++++
> > > arch/riscv/cpu/mpfs/cpu.c | 22 +++++++++++++++
> > > arch/riscv/cpu/mpfs/dram.c | 38
> > > ++++++++++++++++++++++++++
> > > arch/riscv/include/asm/arch-mpfs/clk.h | 8 ++++++
> > > board/microchip/mpfs_generic/Kconfig | 4 +--
> > > 7 files changed, 93 insertions(+), 2 deletions(-)
> > > create mode 100644 arch/riscv/cpu/mpfs/Kconfig
> > > create mode 100644 arch/riscv/cpu/mpfs/Makefile
> > > create mode 100644 arch/riscv/cpu/mpfs/cpu.c
> >
> > The cpu.c file only contains "cleanup_before_linux" and seems
> > identical
> > with the one provided in arch/riscv/cpu/generic/cpu.c.
> >
> > Other than that, LGTM.
> >
> > If you don't mind, I could fix this on my side that you don't need to
> > resend the patchset again.
> >
> > Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
>
> Thank you for your response, review and feedback.
>
> Regarding 'mpfs/cpu.c', you're corect that it is currently identical to
> the generic implementation. Our intent was to provide a placeholder for
> any future Polarfire-specific logic and also assumed it was manditory,
> but if duplication is unneccessary, I'm happy for you to adjust as you
> see fit.
>
> In other words, if U-Boot prefers to avoid duplication and this file is
> not mandatory for build or architextural reasons per CPU implementation,
> than please go ahead and use the generic version.
Got it! Thanks for the explanation.
I’ve updated it to use the generic implementation.
If any Polarfire-specific logic is needed in the future,
we can add this file back at that time.
Best regards,
Leo
>
> Thanks,
> Jamie.
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-12-09 3:40 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-19 12:38 [PATCH 0/2] Add MPFS CPU Implementation Jamie Gibbons
2025-11-19 12:38 ` [PATCH 1/2] riscv: create a custom CPU implementation for PolarFire SoC Jamie Gibbons
2025-12-04 7:45 ` Leo Liang
2025-12-08 12:10 ` Jamie.Gibbons
2025-12-09 3:17 ` Leo Liang
2025-11-19 12:38 ` [PATCH 2/2] riscv: mpfs: move SoC level options to the CPU Kconfig Jamie Gibbons
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox