[PATCH] platform: generic: andes: add QiLai SoC

Ben Zong-You Xie ben717 at andestech.com
Thu Aug 14 03:40:24 PDT 2025


Extend generic platform to support Andes QiLai SoC

Signed-off-by: Ben Zong-You Xie <ben717 at andestech.com>
---
 platform/generic/Kconfig                   |  7 +++
 platform/generic/andes/objects.mk          |  2 +
 platform/generic/andes/qilai.c             | 66 ++++++++++++++++++++++
 platform/generic/configs/defconfig         |  1 +
 platform/generic/include/andes/andes_pma.h |  1 +
 platform/generic/include/andes/qilai.h     | 18 ++++++
 6 files changed, 95 insertions(+)
 create mode 100644 platform/generic/andes/qilai.c
 create mode 100644 platform/generic/include/andes/qilai.h

diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
index a24d6ab2fe46..e1d6be563aa7 100644
--- a/platform/generic/Kconfig
+++ b/platform/generic/Kconfig
@@ -36,6 +36,13 @@ config PLATFORM_ANDES_AE350
 	select ANDES_PMA
 	default n
 
+config PLATFORM_ANDES_QILAI
+	bool "Andes QiLai support"
+	select ANDES_PMU
+	select ANDES_PMA
+	select ANDES_SBI
+	default n
+
 config PLATFORM_RENESAS_RZFIVE
 	bool "Renesas RZ/Five support"
 	select ANDES_PMA
diff --git a/platform/generic/andes/objects.mk b/platform/generic/andes/objects.mk
index 15e618529c44..132e20f2f16f 100644
--- a/platform/generic/andes/objects.mk
+++ b/platform/generic/andes/objects.mk
@@ -3,7 +3,9 @@
 #
 
 carray-platform_override_modules-$(CONFIG_PLATFORM_ANDES_AE350) += andes_ae350
+carray-platform_override_modules-$(CONFIG_PLATFORM_ANDES_QILAI) += andes_qilai
 platform-objs-$(CONFIG_PLATFORM_ANDES_AE350) += andes/ae350.o andes/sleep.o
+platform-objs-$(CONFIG_PLATFORM_ANDES_QILAI) += andes/qilai.o
 
 platform-objs-$(CONFIG_ANDES_PMA) += andes/andes_pma.o
 platform-objs-$(CONFIG_ANDES_SBI) += andes/andes_sbi.o
diff --git a/platform/generic/andes/qilai.c b/platform/generic/andes/qilai.c
new file mode 100644
index 000000000000..a73ba993215e
--- /dev/null
+++ b/platform/generic/andes/qilai.c
@@ -0,0 +1,66 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2025 Andes Technology Corporation
+ *
+ */
+
+#include <andes/andes_pma.h>
+#include <andes/andes_pmu.h>
+#include <andes/andes_sbi.h>
+#include <andes/qilai.h>
+#include <platform_override.h>
+#include <sbi/sbi_domain.h>
+#include <sbi_utils/fdt/fdt_driver.h>
+#include <sbi_utils/fdt/fdt_helper.h>
+
+static int andes_qilai_final_init(bool cold_boot)
+{
+
+	int rc;
+
+	/*
+	 * Set the memory attribute for 3 PCIE endpoint regions,
+	 * and they are all non-idempotent and non-bufferable.
+	 */
+	rc = andes_sbi_set_pma(PCIE0_BASE, PCIE0_SIZE,
+			       ANDES_PMACFG_ETYP_NAPOT |
+			       ANDES_PMACFG_MTYP_DEV_NOBUF);
+	if (rc)
+		return rc;
+
+	rc = andes_sbi_set_pma(PCIE1_BASE, PCIE1_SIZE,
+			       ANDES_PMACFG_ETYP_NAPOT |
+			       ANDES_PMACFG_MTYP_DEV_NOBUF);
+	if (rc)
+		return rc;
+
+	rc = andes_sbi_set_pma(PCIE2_BASE, PCIE2_SIZE,
+			       ANDES_PMACFG_ETYP_NAPOT |
+			       ANDES_PMACFG_MTYP_DEV_NOBUF);
+	if (rc)
+		return rc;
+
+	return generic_final_init(cold_boot);
+}
+
+static int andes_qilai_platform_init(const void *fdt, int nodeoff,
+				     const struct fdt_match *match)
+{
+	generic_platform_ops.final_init	     = andes_qilai_final_init;
+	generic_platform_ops.extensions_init = andes_pmu_extensions_init;
+	generic_platform_ops.pmu_init	     = andes_pmu_init;
+	generic_platform_ops.vendor_ext_provider =
+		andes_sbi_vendor_ext_provider;
+	return 0;
+}
+
+static const struct fdt_match andes_qilai_match[] = {
+	{ .compatible = "andestech,qilai" },
+	{},
+};
+
+const struct fdt_driver andes_qilai = {
+	.match_table = andes_qilai_match,
+	.init	     = andes_qilai_platform_init,
+};
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index c7a6531e04bc..fc09edef8238 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,5 +1,6 @@
 CONFIG_PLATFORM_ALLWINNER_D1=y
 CONFIG_PLATFORM_ANDES_AE350=y
+CONFIG_PLATFORM_ANDES_QILAI=y
 CONFIG_PLATFORM_RENESAS_RZFIVE=y
 CONFIG_PLATFORM_SIFIVE_FU540=y
 CONFIG_PLATFORM_SIFIVE_FU740=y
diff --git a/platform/generic/include/andes/andes_pma.h b/platform/generic/include/andes/andes_pma.h
index be6149640c04..5b0ed0acfda8 100644
--- a/platform/generic/include/andes/andes_pma.h
+++ b/platform/generic/include/andes/andes_pma.h
@@ -19,6 +19,7 @@
 #define ANDES_PMACFG_ETYP_NAPOT			(3 << ANDES_PMACFG_ETYP_OFFSET)
 
 #define ANDES_PMACFG_MTYP_OFFSET		2
+#define ANDES_PMACFG_MTYP_DEV_NOBUF		(0 << ANDES_PMACFG_MTYP_OFFSET)
 /* Memory, Non-cacheable, Bufferable */
 #define ANDES_PMACFG_MTYP_MEM_NON_CACHE_BUF	(3 << ANDES_PMACFG_MTYP_OFFSET)
 
diff --git a/platform/generic/include/andes/qilai.h b/platform/generic/include/andes/qilai.h
new file mode 100644
index 000000000000..dfb0477fcb66
--- /dev/null
+++ b/platform/generic/include/andes/qilai.h
@@ -0,0 +1,18 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2025 Andes Technology Corporation
+ *
+ */
+
+#ifndef __QILAI_H__
+#define __QILAI_H__
+
+#define PCIE0_BASE 0x1000000000
+#define PCIE0_SIZE 0x800000000
+#define PCIE1_BASE 0x1800000000
+#define PCIE1_SIZE 0x800000000
+#define PCIE2_BASE 0x2000000000
+#define PCIE2_SIZE 0x2000000000
+
+#endif
-- 
2.34.1




More information about the opensbi mailing list