diff options
author | Anup Patel <anup.patel@wdc.com> | 2020-04-28 09:35:32 +0530 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2020-05-01 10:33:14 +0530 |
commit | 4f18c6e55049d858c62e87d2605dd41c06956e4e (patch) | |
tree | 5c21d44b01ae85facbe283fd00d07b0ee5be3503 | |
parent | 2ba7087b09123f9f4eb6328e2d10e942e181d096 (diff) |
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>
-rw-r--r-- | platform/generic/objects.mk | 1 | ||||
-rw-r--r-- | platform/generic/platform.c | 6 | ||||
-rw-r--r-- | platform/generic/sifive_fu540.c | 33 |
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, +}; |