mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-02-27 18:01:45 +00:00
platform: generic: mips p8700: Add match data for CM info
Introduce a structure p8700_cm_info holding the number of coherence managers and their base addresses found in a particular SoC. Declare a global pointer to the structure that is set in mips_p8700_platform_init(), based on the match data of the platform compatible. For the match data of the MIPS P8700, a single coherence manager with a base address of 0x16100000 is declared, identical to what is found in mips/board.h. For now, access to the coherence manager register is still based on the hard-coded values defined in mips/board.h. Signed-off-by: Benoît Monin <benoit.monin@bootlin.com> Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20260223-for-upstream-eyeq7h-v3-8-621d004d1a21@mobileye.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -10,6 +10,18 @@
|
||||
|
||||
#include <mips/board.h>
|
||||
|
||||
/** Coherence manager information
|
||||
*
|
||||
* @num_cm: Number of coherence manager
|
||||
* @gcr_base: Array of base address of the CM
|
||||
*/
|
||||
struct p8700_cm_info {
|
||||
unsigned int num_cm;
|
||||
unsigned long *gcr_base;
|
||||
};
|
||||
|
||||
extern const struct p8700_cm_info *p8700_cm_info;
|
||||
|
||||
/* PMA */
|
||||
#define CSR_MIPSPMACFG0 0x7e0
|
||||
#define CSR_MIPSPMACFG1 0x7e1
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
#include <mips/p8700.h>
|
||||
#include <mips/mips-cm.h>
|
||||
|
||||
const struct p8700_cm_info *p8700_cm_info;
|
||||
|
||||
extern void mips_warm_boot(void);
|
||||
#define MMIO_BASE 0x00000000
|
||||
#define MMIO_SIZE 0x80000000
|
||||
@@ -287,6 +289,14 @@ static int mips_p8700_nascent_init(void)
|
||||
|
||||
static int mips_p8700_platform_init(const void *fdt, int nodeoff, const struct fdt_match *match)
|
||||
{
|
||||
const struct p8700_cm_info *data = match->data;
|
||||
|
||||
if (!data) {
|
||||
sbi_printf("Missing CM info for %s\n", match->compatible);
|
||||
return SBI_EINVAL;
|
||||
}
|
||||
|
||||
p8700_cm_info = data;
|
||||
generic_platform_ops.early_init = mips_p8700_early_init;
|
||||
generic_platform_ops.final_init = mips_p8700_final_init;
|
||||
generic_platform_ops.nascent_init = mips_p8700_nascent_init;
|
||||
@@ -295,8 +305,17 @@ static int mips_p8700_platform_init(const void *fdt, int nodeoff, const struct f
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long mips_p8700_gcr_base[] = {
|
||||
0x16100000,
|
||||
};
|
||||
|
||||
static struct p8700_cm_info mips_p8700_cm_info = {
|
||||
.num_cm = array_size(mips_p8700_gcr_base),
|
||||
.gcr_base = mips_p8700_gcr_base,
|
||||
};
|
||||
|
||||
static const struct fdt_match mips_p8700_match[] = {
|
||||
{ .compatible = "mips,p8700" },
|
||||
{ .compatible = "mips,p8700", .data = &mips_p8700_cm_info },
|
||||
{ },
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user