mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-10-09 18:12:18 +01:00

Extend generic platform to support Andes QiLai SoC. Signed-off-by: Ben Zong-You Xie <ben717@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20250814104024.3374698-1-ben717@andestech.com Signed-off-by: Anup Patel <anup@brainfault.org>
67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
/*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*
|
|
* Copyright (c) 2025 Andes Technology Corporation
|
|
*
|
|
*/
|
|
|
|
#include <andes/andes_pma.h>
|
|
#include <andes/andes_pmu.h>
|
|
#include <andes/andes_sbi.h>
|
|
#include <andes/qilai.h>
|
|
#include <platform_override.h>
|
|
#include <sbi/sbi_domain.h>
|
|
#include <sbi_utils/fdt/fdt_driver.h>
|
|
#include <sbi_utils/fdt/fdt_helper.h>
|
|
|
|
static int andes_qilai_final_init(bool cold_boot)
|
|
{
|
|
|
|
int rc;
|
|
|
|
/*
|
|
* Set the memory attribute for 3 PCIE endpoint regions,
|
|
* and they are all non-idempotent and non-bufferable.
|
|
*/
|
|
rc = andes_sbi_set_pma((unsigned long)PCIE0_BASE, (unsigned long)PCIE0_SIZE,
|
|
ANDES_PMACFG_ETYP_NAPOT |
|
|
ANDES_PMACFG_MTYP_DEV_NOBUF);
|
|
if (rc)
|
|
return rc;
|
|
|
|
rc = andes_sbi_set_pma((unsigned long)PCIE1_BASE, (unsigned long)PCIE1_SIZE,
|
|
ANDES_PMACFG_ETYP_NAPOT |
|
|
ANDES_PMACFG_MTYP_DEV_NOBUF);
|
|
if (rc)
|
|
return rc;
|
|
|
|
rc = andes_sbi_set_pma((unsigned long)PCIE2_BASE, (unsigned long)PCIE2_SIZE,
|
|
ANDES_PMACFG_ETYP_NAPOT |
|
|
ANDES_PMACFG_MTYP_DEV_NOBUF);
|
|
if (rc)
|
|
return rc;
|
|
|
|
return generic_final_init(cold_boot);
|
|
}
|
|
|
|
static int andes_qilai_platform_init(const void *fdt, int nodeoff,
|
|
const struct fdt_match *match)
|
|
{
|
|
generic_platform_ops.final_init = andes_qilai_final_init;
|
|
generic_platform_ops.extensions_init = andes_pmu_extensions_init;
|
|
generic_platform_ops.pmu_init = andes_pmu_init;
|
|
generic_platform_ops.vendor_ext_provider =
|
|
andes_sbi_vendor_ext_provider;
|
|
return 0;
|
|
}
|
|
|
|
static const struct fdt_match andes_qilai_match[] = {
|
|
{ .compatible = "andestech,qilai" },
|
|
{},
|
|
};
|
|
|
|
const struct fdt_driver andes_qilai = {
|
|
.match_table = andes_qilai_match,
|
|
.init = andes_qilai_platform_init,
|
|
};
|