mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
bugfix: fix pmp retention and add pma retention
This commit is contained in:
parent
099234347c
commit
756b5f628d
@ -449,10 +449,7 @@ static IRAM_ATTR RvCoreNonCriticalSleepFrame * rv_core_noncritical_regs_save(voi
|
|||||||
frame->tdata1 = RV_READ_CSR(tdata1);
|
frame->tdata1 = RV_READ_CSR(tdata1);
|
||||||
frame->tdata2 = RV_READ_CSR(tdata2);
|
frame->tdata2 = RV_READ_CSR(tdata2);
|
||||||
frame->tcontrol = RV_READ_CSR(tcontrol);
|
frame->tcontrol = RV_READ_CSR(tcontrol);
|
||||||
frame->pmpcfg0 = RV_READ_CSR(pmpcfg0);
|
|
||||||
frame->pmpcfg1 = RV_READ_CSR(pmpcfg1);
|
|
||||||
frame->pmpcfg2 = RV_READ_CSR(pmpcfg2);
|
|
||||||
frame->pmpcfg3 = RV_READ_CSR(pmpcfg3);
|
|
||||||
frame->pmpaddr0 = RV_READ_CSR(pmpaddr0);
|
frame->pmpaddr0 = RV_READ_CSR(pmpaddr0);
|
||||||
frame->pmpaddr1 = RV_READ_CSR(pmpaddr1);
|
frame->pmpaddr1 = RV_READ_CSR(pmpaddr1);
|
||||||
frame->pmpaddr2 = RV_READ_CSR(pmpaddr2);
|
frame->pmpaddr2 = RV_READ_CSR(pmpaddr2);
|
||||||
@ -469,6 +466,45 @@ static IRAM_ATTR RvCoreNonCriticalSleepFrame * rv_core_noncritical_regs_save(voi
|
|||||||
frame->pmpaddr13 = RV_READ_CSR(pmpaddr13);
|
frame->pmpaddr13 = RV_READ_CSR(pmpaddr13);
|
||||||
frame->pmpaddr14 = RV_READ_CSR(pmpaddr14);
|
frame->pmpaddr14 = RV_READ_CSR(pmpaddr14);
|
||||||
frame->pmpaddr15 = RV_READ_CSR(pmpaddr15);
|
frame->pmpaddr15 = RV_READ_CSR(pmpaddr15);
|
||||||
|
frame->pmpcfg0 = RV_READ_CSR(pmpcfg0);
|
||||||
|
frame->pmpcfg1 = RV_READ_CSR(pmpcfg1);
|
||||||
|
frame->pmpcfg2 = RV_READ_CSR(pmpcfg2);
|
||||||
|
frame->pmpcfg3 = RV_READ_CSR(pmpcfg3);
|
||||||
|
|
||||||
|
#if SOC_CPU_HAS_PMA
|
||||||
|
frame->pmaaddr0 = RV_READ_CSR(CSR_PMAADDR(0));
|
||||||
|
frame->pmaaddr1 = RV_READ_CSR(CSR_PMAADDR(1));
|
||||||
|
frame->pmaaddr2 = RV_READ_CSR(CSR_PMAADDR(2));
|
||||||
|
frame->pmaaddr3 = RV_READ_CSR(CSR_PMAADDR(3));
|
||||||
|
frame->pmaaddr4 = RV_READ_CSR(CSR_PMAADDR(4));
|
||||||
|
frame->pmaaddr5 = RV_READ_CSR(CSR_PMAADDR(5));
|
||||||
|
frame->pmaaddr6 = RV_READ_CSR(CSR_PMAADDR(6));
|
||||||
|
frame->pmaaddr7 = RV_READ_CSR(CSR_PMAADDR(7));
|
||||||
|
frame->pmaaddr8 = RV_READ_CSR(CSR_PMAADDR(8));
|
||||||
|
frame->pmaaddr9 = RV_READ_CSR(CSR_PMAADDR(9));
|
||||||
|
frame->pmaaddr10 = RV_READ_CSR(CSR_PMAADDR(10));
|
||||||
|
frame->pmaaddr11 = RV_READ_CSR(CSR_PMAADDR(11));
|
||||||
|
frame->pmaaddr12 = RV_READ_CSR(CSR_PMAADDR(12));
|
||||||
|
frame->pmaaddr13 = RV_READ_CSR(CSR_PMAADDR(13));
|
||||||
|
frame->pmaaddr14 = RV_READ_CSR(CSR_PMAADDR(14));
|
||||||
|
frame->pmaaddr15 = RV_READ_CSR(CSR_PMAADDR(15));
|
||||||
|
frame->pmacfg0 = RV_READ_CSR(CSR_PMACFG(0));
|
||||||
|
frame->pmacfg1 = RV_READ_CSR(CSR_PMACFG(1));
|
||||||
|
frame->pmacfg2 = RV_READ_CSR(CSR_PMACFG(2));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(3));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(4));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(5));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(6));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(7));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(8));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(9));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(10));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(11));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(12));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(13));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(14));
|
||||||
|
frame->pmacfg3 = RV_READ_CSR(CSR_PMACFG(15));
|
||||||
|
#endif // SOC_CPU_HAS_PMA
|
||||||
|
|
||||||
frame->utvec = RV_READ_CSR(utvec);
|
frame->utvec = RV_READ_CSR(utvec);
|
||||||
frame->ustatus = RV_READ_CSR(ustatus);
|
frame->ustatus = RV_READ_CSR(ustatus);
|
||||||
@ -498,10 +534,6 @@ static IRAM_ATTR void rv_core_noncritical_regs_restore(RvCoreNonCriticalSleepFra
|
|||||||
RV_WRITE_CSR(tdata1, frame->tdata1);
|
RV_WRITE_CSR(tdata1, frame->tdata1);
|
||||||
RV_WRITE_CSR(tdata2, frame->tdata2);
|
RV_WRITE_CSR(tdata2, frame->tdata2);
|
||||||
RV_WRITE_CSR(tcontrol, frame->tcontrol);
|
RV_WRITE_CSR(tcontrol, frame->tcontrol);
|
||||||
RV_WRITE_CSR(pmpcfg0, frame->pmpcfg0);
|
|
||||||
RV_WRITE_CSR(pmpcfg1, frame->pmpcfg1);
|
|
||||||
RV_WRITE_CSR(pmpcfg2, frame->pmpcfg2);
|
|
||||||
RV_WRITE_CSR(pmpcfg3, frame->pmpcfg3);
|
|
||||||
RV_WRITE_CSR(pmpaddr0, frame->pmpaddr0);
|
RV_WRITE_CSR(pmpaddr0, frame->pmpaddr0);
|
||||||
RV_WRITE_CSR(pmpaddr1, frame->pmpaddr1);
|
RV_WRITE_CSR(pmpaddr1, frame->pmpaddr1);
|
||||||
RV_WRITE_CSR(pmpaddr2, frame->pmpaddr2);
|
RV_WRITE_CSR(pmpaddr2, frame->pmpaddr2);
|
||||||
@ -518,6 +550,45 @@ static IRAM_ATTR void rv_core_noncritical_regs_restore(RvCoreNonCriticalSleepFra
|
|||||||
RV_WRITE_CSR(pmpaddr13,frame->pmpaddr13);
|
RV_WRITE_CSR(pmpaddr13,frame->pmpaddr13);
|
||||||
RV_WRITE_CSR(pmpaddr14,frame->pmpaddr14);
|
RV_WRITE_CSR(pmpaddr14,frame->pmpaddr14);
|
||||||
RV_WRITE_CSR(pmpaddr15,frame->pmpaddr15);
|
RV_WRITE_CSR(pmpaddr15,frame->pmpaddr15);
|
||||||
|
RV_WRITE_CSR(pmpcfg0, frame->pmpcfg0);
|
||||||
|
RV_WRITE_CSR(pmpcfg1, frame->pmpcfg1);
|
||||||
|
RV_WRITE_CSR(pmpcfg2, frame->pmpcfg2);
|
||||||
|
RV_WRITE_CSR(pmpcfg3, frame->pmpcfg3);
|
||||||
|
|
||||||
|
#if SOC_CPU_HAS_PMA
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(0), frame->pmaaddr0);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(1), frame->pmaaddr1);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(2), frame->pmaaddr2);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(3), frame->pmaaddr3);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(4), frame->pmaaddr4);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(5), frame->pmaaddr5);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(6), frame->pmaaddr6);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(7), frame->pmaaddr7);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(8), frame->pmaaddr8);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(9), frame->pmaaddr9);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(10),frame->pmaaddr10);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(11),frame->pmaaddr11);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(12),frame->pmaaddr12);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(13),frame->pmaaddr13);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(14),frame->pmaaddr14);
|
||||||
|
RV_WRITE_CSR(CSR_PMAADDR(15),frame->pmaaddr15);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(0), frame->pmacfg0);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(1), frame->pmacfg1);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(2), frame->pmacfg2);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(3), frame->pmacfg3);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(4), frame->pmacfg4);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(5), frame->pmacfg5);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(6), frame->pmacfg6);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(7), frame->pmacfg7);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(8), frame->pmacfg8);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(9), frame->pmacfg9);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(10), frame->pmacfg10);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(11), frame->pmacfg11);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(12), frame->pmacfg12);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(13), frame->pmacfg13);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(14), frame->pmacfg14);
|
||||||
|
RV_WRITE_CSR(CSR_PMACFG(15), frame->pmacfg15);
|
||||||
|
#endif //SOC_CPU_HAS_PMA
|
||||||
|
|
||||||
RV_WRITE_CSR(utvec, frame->utvec);
|
RV_WRITE_CSR(utvec, frame->utvec);
|
||||||
RV_WRITE_CSR(ustatus, frame->ustatus);
|
RV_WRITE_CSR(ustatus, frame->ustatus);
|
||||||
|
@ -49,6 +49,9 @@ extern "C" {
|
|||||||
#define CSR_PMACFG0 0xBC0
|
#define CSR_PMACFG0 0xBC0
|
||||||
#define CSR_PMAADDR0 0xBD0
|
#define CSR_PMAADDR0 0xBD0
|
||||||
|
|
||||||
|
#define CSR_PMACFG(i) (CSR_PMACFG0 + (i))
|
||||||
|
#define CSR_PMAADDR(i) (CSR_PMAADDR0 + (i))
|
||||||
|
|
||||||
#define PMA_EN BIT(0)
|
#define PMA_EN BIT(0)
|
||||||
#define PMA_R BIT(4)
|
#define PMA_R BIT(4)
|
||||||
#define PMA_W BIT(3)
|
#define PMA_W BIT(3)
|
||||||
|
@ -117,10 +117,6 @@ STRUCT_BEGIN
|
|||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_TDATA1, tdata1)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_TDATA1, tdata1)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_TDATA2, tdata2)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_TDATA2, tdata2)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_TCONTROL, tcontrol)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_TCONTROL, tcontrol)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG0, pmpcfg0)
|
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG1, pmpcfg1)
|
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG2, pmpcfg2)
|
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG3, pmpcfg3)
|
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR0, pmpaddr0)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR0, pmpaddr0)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR1, pmpaddr1)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR1, pmpaddr1)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR2, pmpaddr2)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR2, pmpaddr2)
|
||||||
@ -137,6 +133,45 @@ STRUCT_BEGIN
|
|||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR13, pmpaddr13)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR13, pmpaddr13)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR14, pmpaddr14)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR14, pmpaddr14)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR15, pmpaddr15)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPADDR15, pmpaddr15)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG0, pmpcfg0)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG1, pmpcfg1)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG2, pmpcfg2)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMPCFG3, pmpcfg3)
|
||||||
|
|
||||||
|
#if SOC_CPU_HAS_PMA
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR0, pmaaddr0)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR1, pmaaddr1)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR2, pmaaddr2)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR3, pmaaddr3)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR4, pmaaddr4)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR5, pmaaddr5)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR6, pmaaddr6)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR7, pmaaddr7)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR8, pmaaddr8)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR9, pmaaddr9)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR10, pmaaddr10)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR11, pmaaddr11)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR12, pmaaddr12)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR13, pmaaddr13)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR14, pmaaddr14)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMAADDR15, pmaaddr15)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG0, pmacfg0)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG1, pmacfg1)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG2, pmacfg2)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG3, pmacfg3)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG4, pmacfg4)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG5, pmacfg5)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG6, pmacfg6)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG7, pmacfg7)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG8, pmacfg8)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG9, pmacfg9)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG10, pmacfg10)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG11, pmacfg11)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG12, pmacfg12)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG13, pmacfg13)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG14, pmacfg14)
|
||||||
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMACFG15, pmacfg15)
|
||||||
|
#endif // SOC_CPU_HAS_PMA
|
||||||
|
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_UTVEC, utvec)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_UTVEC, utvec)
|
||||||
STRUCT_FIELD (long, 4, RV_SLP_CTX_USTATUS, ustatus)
|
STRUCT_FIELD (long, 4, RV_SLP_CTX_USTATUS, ustatus)
|
||||||
|
Loading…
Reference in New Issue
Block a user