summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@wdc.com>2020-04-28 07:05:32 +0300
committerAnup Patel <anup@brainfault.org>2020-05-01 08:03:14 +0300
commit4f18c6e55049d858c62e87d2605dd41c06956e4e (patch)
tree5c21d44b01ae85facbe283fd00d07b0ee5be3503 /platform
parent2ba7087b09123f9f4eb6328e2d10e942e181d096 (diff)
downloadopensbi-4f18c6e55049d858c62e87d2605dd41c06956e4e.tar.xz
platform: generic: Add Sifive FU540 TLB flush range limit override
We need to override the remote TLB flush range limit for SiFive FU540 so we add platform override to achieve this. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'platform')
-rw-r--r--platform/generic/objects.mk1
-rw-r--r--platform/generic/platform.c6
-rw-r--r--platform/generic/sifive_fu540.c33
3 files changed, 39 insertions, 1 deletions
diff --git a/platform/generic/objects.mk b/platform/generic/objects.mk
index 5ed4437..d6c8a42 100644
--- a/platform/generic/objects.mk
+++ b/platform/generic/objects.mk
@@ -8,3 +8,4 @@
#
platform-objs-y += platform.o
+platform-objs-y += sifive_fu540.o
diff --git a/platform/generic/platform.c b/platform/generic/platform.c
index cb16cc4..7b4a0ae 100644
--- a/platform/generic/platform.c
+++ b/platform/generic/platform.c
@@ -21,7 +21,11 @@
#include <sbi_utils/ipi/fdt_ipi.h>
#include <sbi_utils/reset/fdt_reset.h>
-static const struct platform_override *special_platforms[] = { };
+extern const struct platform_override sifive_fu540;
+
+static const struct platform_override *special_platforms[] = {
+ &sifive_fu540,
+};
static const struct platform_override *generic_plat = NULL;
static const struct fdt_match *generic_plat_match = NULL;
diff --git a/platform/generic/sifive_fu540.c b/platform/generic/sifive_fu540.c
new file mode 100644
index 0000000..9ddafa0
--- /dev/null
+++ b/platform/generic/sifive_fu540.c
@@ -0,0 +1,33 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Western Digital Corporation or its affiliates.
+ *
+ * Authors:
+ * Anup Patel <anup.patel@wdc.com>
+ */
+
+#include <platform_override.h>
+#include <sbi_utils/fdt/fdt_helper.h>
+
+static u64 sifive_fu540_tlbr_flush_limit(const struct fdt_match *match)
+{
+ /*
+ * The sfence.vma by virtual address does not work on
+ * SiFive FU540 so we return remote TLB flush limit as zero.
+ */
+ return 0;
+}
+
+static const struct fdt_match sifive_fu540_match[] = {
+ { .compatible = "sifive,fu540" },
+ { .compatible = "sifive,fu540g" },
+ { .compatible = "sifive,fu540-c000" },
+ { .compatible = "sifive,hifive-unleashed-a00" },
+ { },
+};
+
+const struct platform_override sifive_fu540 = {
+ .match_table = sifive_fu540_match,
+ .tlbr_flush_limit = sifive_fu540_tlbr_flush_limit,
+};