1313#include <xuantie/xuantie_quirk.h>
1414#include <xuantie/xuantie_pmc.h>
1515#include <xuantie/xuantie_link.h>
16+ #include <xuantie/xuantie_pmp_ext.h>
1617
1718static u32 gquirk = 0 ;
1819
20+ int xuantie_early_init (bool cold_boot )
21+ {
22+ if (cold_boot ) {
23+ if (gquirk & QUIRK_XUANTIE_PMP_EXT )
24+ xuantie_pmp_ext_cfg ();
25+ }
26+
27+ return generic_early_init (cold_boot );
28+ }
29+
1930int xuantie_final_init (bool cold_boot )
2031{
2132 if (cold_boot ) {
@@ -34,13 +45,14 @@ static int xuantie_dummy_platform_init(const void *fdt, int nodeoff,
3445 const struct xuantie_generic_quirks * data = match -> data ;
3546
3647 gquirk = data -> quirk ;
48+ generic_platform_ops .early_init = xuantie_early_init ;
3749 generic_platform_ops .final_init = xuantie_final_init ;
3850
3951 return 0 ;
4052}
4153
4254static const struct xuantie_generic_quirks xuantie_quirks = {
43- .quirk = QUIRK_XUANTIE_PMC | QUIRK_XUANTIE_LINK ,
55+ .quirk = QUIRK_XUANTIE_PMC | QUIRK_XUANTIE_LINK | QUIRK_XUANTIE_PMP_EXT ,
4456};
4557
4658static const struct xuantie_generic_quirks xuantie_pmc_quirks = {
@@ -51,10 +63,15 @@ static const struct xuantie_generic_quirks xuantie_link_quirks = {
5163 .quirk = QUIRK_XUANTIE_LINK ,
5264};
5365
66+ static const struct xuantie_generic_quirks xuantie_pmp_ext_quirks = {
67+ .quirk = QUIRK_XUANTIE_PMP_EXT ,
68+ };
69+
5470static const struct fdt_match xuantie_dummy_match [] = {
5571 { .compatible = "xuantie,dummy" , .data = & xuantie_quirks },
5672 { .compatible = "xuantie,pmc" , .data = & xuantie_pmc_quirks },
5773 { .compatible = "xuantie,link" , .data = & xuantie_link_quirks },
74+ { .compatible = "riscv-virtio" , .data = & xuantie_pmp_ext_quirks }, // qemu debug
5875 { },
5976};
6077
0 commit comments