Merge https://source.denx.de/u-boot/custodians/u-boot-riscv
diff --git a/Kconfig b/Kconfig
index 1127454..678317e 100644
--- a/Kconfig
+++ b/Kconfig
@@ -248,7 +248,7 @@
 	hex "Size of malloc() pool before relocation"
 	depends on SYS_MALLOC_F
 	default 0x1000 if AM33XX
-	default 0x4000 if SANDBOX
+	default 0x4000 if SANDBOX || RISCV
 	default 0x2000 if (ARCH_IMX8 || ARCH_IMX8M || ARCH_MX7 || \
 			   ARCH_MX7ULP || ARCH_MX6 || ARCH_MX5 || \
 			   ARCH_LS1012A || ARCH_LS1021A || ARCH_LS1043A || \
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index ba29e70..78e964d 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -195,9 +195,6 @@
 	  The Andes PLIC block holds memory-mapped claim and pending registers
 	  associated with software interrupt.
 
-config SYS_MALLOC_F_LEN
-	default 0x1000
-
 config SMP
 	bool "Symmetric Multi-Processing"
 	depends on SBI_V01 || !RISCV_SMODE
diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h
index bfcd204..81fcfe0 100644
--- a/arch/riscv/include/asm/sbi.h
+++ b/arch/riscv/include/asm/sbi.h
@@ -27,6 +27,7 @@
 	SBI_EXT_RFENCE = 0x52464E43,
 	SBI_EXT_HSM = 0x48534D,
 	SBI_EXT_SRST = 0x53525354,
+	SBI_EXT_PMU = 0x504D55,
 };
 
 enum sbi_ext_base_fid {
@@ -154,6 +155,9 @@
 int sbi_get_impl_id(void);
 int sbi_get_impl_version(long *version);
 int sbi_probe_extension(int ext);
+int sbi_get_mvendorid(long *mvendorid);
+int sbi_get_marchid(long *marchid);
+int sbi_get_mimpid(long *mimpid);
 void sbi_srst_reset(unsigned long type, unsigned long reason);
 
 #endif
diff --git a/arch/riscv/lib/sbi.c b/arch/riscv/lib/sbi.c
index d427d1b..8724e3a 100644
--- a/arch/riscv/lib/sbi.c
+++ b/arch/riscv/lib/sbi.c
@@ -128,6 +128,71 @@
 }
 
 /**
+ * sbi_get_mvendorid() - get machine vendor ID
+ *
+ * @mimpid:	on return machine vendor ID
+ * Return:	0 on success
+ */
+int sbi_get_mvendorid(long *mvendorid)
+{
+	struct sbiret ret;
+
+	ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_MVENDORID,
+			0, 0, 0, 0, 0, 0);
+	if (ret.error)
+		return -ENOTSUPP;
+
+	if (mvendorid)
+		*mvendorid = ret.value;
+
+	return 0;
+}
+
+/**
+ * sbi_get_marchid() - get machine architecture ID
+ *
+ * @mimpid:	on return machine architecture ID
+ * Return:	0 on success
+ */
+int sbi_get_marchid(long *marchid)
+{
+	struct sbiret ret;
+
+	ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_MARCHID,
+			0, 0, 0, 0, 0, 0);
+
+	if (ret.error)
+		return -ENOTSUPP;
+
+	if (marchid)
+		*marchid = ret.value;
+
+	return 0;
+}
+
+/**
+ * sbi_get_mimpid() - get machine implementation ID
+ *
+ * @mimpid:	on return machine implementation ID
+ * Return:	0 on success
+ */
+int sbi_get_mimpid(long *mimpid)
+{
+	struct sbiret ret;
+
+	ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_MIMPID,
+			0, 0, 0, 0, 0, 0);
+
+	if (ret.error)
+		return -ENOTSUPP;
+
+	if (mimpid)
+		*mimpid = ret.value;
+
+	return 0;
+}
+
+/**
  * sbi_srst_reset() - invoke system reset extension
  *
  * @type:	type of reset
diff --git a/board/emulation/qemu-riscv/Kconfig b/board/emulation/qemu-riscv/Kconfig
index 02bf847..d8c57e6 100644
--- a/board/emulation/qemu-riscv/Kconfig
+++ b/board/emulation/qemu-riscv/Kconfig
@@ -37,6 +37,7 @@
 	imply SPL_RAM_DEVICE
 	imply CMD_PCI
 	imply CMD_POWEROFF
+	imply CMD_SBI
 	imply CMD_SCSI
 	imply CMD_PING
 	imply CMD_EXT2
diff --git a/cmd/riscv/sbi.c b/cmd/riscv/sbi.c
index c4a9c84..8fc8ab0 100644
--- a/cmd/riscv/sbi.c
+++ b/cmd/riscv/sbi.c
@@ -44,6 +44,7 @@
 	{ SBI_EXT_RFENCE,		      "RFENCE Extension" },
 	{ SBI_EXT_HSM,			      "Hart State Management Extension" },
 	{ SBI_EXT_SRST,			      "System Reset Extension" },
+	{ SBI_EXT_PMU,			      "Performance Monitoring Unit Extension" },
 };
 
 static int do_sbi(struct cmd_tbl *cmdtp, int flag, int argc,
@@ -51,6 +52,7 @@
 {
 	int i, impl_id;
 	long ret;
+	long mvendorid, marchid, mimpid;
 
 	ret = sbi_get_spec_version();
 	if (ret >= 0)
@@ -76,7 +78,17 @@
 		if (i == ARRAY_SIZE(implementations))
 			printf("Unknown implementation ID %ld", ret);
 	}
-	printf("\nExtensions:\n");
+	printf("\nMachine:\n");
+	ret = sbi_get_mvendorid(&mvendorid);
+	if (!ret)
+		printf("  Vendor ID %lx\n", mvendorid);
+	ret = sbi_get_marchid(&marchid);
+	if (!ret)
+		printf("  Architecture ID %lx\n", marchid);
+	ret = sbi_get_mimpid(&mimpid);
+	if (!ret)
+		printf("  Implementation ID %lx\n", mimpid);
+	printf("Extensions:\n");
 	for (i = 0; i < ARRAY_SIZE(extensions); ++i) {
 		ret = sbi_probe_extension(extensions[i].id);
 		if (ret > 0)