forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
riscv: errata: Add Andes alternative ports
Add required ports of the Alternative scheme for Andes CPU cores. I/O Coherence Port (IOCP) provides an AXI interface for connecting external non-caching masters, such as DMA controllers. IOCP is a specification option and is disabled on the Renesas RZ/Five SoC due to this reason cache management needs a software workaround. Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Reviewed-by: Conor Dooley <conor.dooley@microchip.com> Tested-by: Conor Dooley <conor.dooley@microchip.com> # tyre-kicking on a d1 Link: https://lore.kernel.org/r/20230818135723.80612-3-prabhakar.mahadev-lad.rj@bp.renesas.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
- Loading branch information
1 parent
d6ca3a5
commit e021ae7
Showing
7 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
obj-y += errata.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
/* | ||
* Erratas to be applied for Andes CPU cores | ||
* | ||
* Copyright (C) 2023 Renesas Electronics Corporation. | ||
* | ||
* Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> | ||
*/ | ||
|
||
#include <linux/memory.h> | ||
#include <linux/module.h> | ||
|
||
#include <asm/alternative.h> | ||
#include <asm/cacheflush.h> | ||
#include <asm/errata_list.h> | ||
#include <asm/patch.h> | ||
#include <asm/processor.h> | ||
#include <asm/sbi.h> | ||
#include <asm/vendorid_list.h> | ||
|
||
#define ANDESTECH_AX45MP_MARCHID 0x8000000000008a45UL | ||
#define ANDESTECH_AX45MP_MIMPID 0x500UL | ||
#define ANDESTECH_SBI_EXT_ANDES 0x0900031E | ||
|
||
#define ANDES_SBI_EXT_IOCP_SW_WORKAROUND 1 | ||
|
||
static long ax45mp_iocp_sw_workaround(void) | ||
{ | ||
struct sbiret ret; | ||
|
||
/* | ||
* ANDES_SBI_EXT_IOCP_SW_WORKAROUND SBI EXT checks if the IOCP is missing and | ||
* cache is controllable only then CMO will be applied to the platform. | ||
*/ | ||
ret = sbi_ecall(ANDESTECH_SBI_EXT_ANDES, ANDES_SBI_EXT_IOCP_SW_WORKAROUND, | ||
0, 0, 0, 0, 0, 0); | ||
|
||
return ret.error ? 0 : ret.value; | ||
} | ||
|
||
static bool errata_probe_iocp(unsigned int stage, unsigned long arch_id, unsigned long impid) | ||
{ | ||
if (!IS_ENABLED(CONFIG_ERRATA_ANDES_CMO)) | ||
return false; | ||
|
||
if (arch_id != ANDESTECH_AX45MP_MARCHID || impid != ANDESTECH_AX45MP_MIMPID) | ||
return false; | ||
|
||
if (!ax45mp_iocp_sw_workaround()) | ||
return false; | ||
|
||
/* Set this just to make core cbo code happy */ | ||
riscv_cbom_block_size = 1; | ||
riscv_noncoherent_supported(); | ||
|
||
return true; | ||
} | ||
|
||
void __init_or_module andes_errata_patch_func(struct alt_entry *begin, struct alt_entry *end, | ||
unsigned long archid, unsigned long impid, | ||
unsigned int stage) | ||
{ | ||
errata_probe_iocp(stage, archid, impid); | ||
|
||
/* we have nothing to patch here ATM so just return back */ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters