|
@@ -371,3 +371,181 @@
|
|
B0 = I0;
|
|
B0 = I0;
|
|
B1 = I0;
|
|
B1 = I0;
|
|
B2 = I0;
|
|
B2 = I0;
|
|
|
|
+ B3 = I0;
|
|
|
|
+ I1.L = lo(DCPLB_ADDR0);
|
|
|
|
+ I2.L = lo(DCPLB_DATA0);
|
|
|
|
+ I3.L = lo(ICPLB_ADDR0);
|
|
|
|
+ B0.L = lo(ICPLB_DATA0);
|
|
|
|
+ B1.L = lo(EVT2);
|
|
|
|
+ B2.L = lo(IMASK);
|
|
|
|
+ B3.L = lo(TCNTL);
|
|
|
|
+
|
|
|
|
+ /* Event Vectors */
|
|
|
|
+ FP = B1;
|
|
|
|
+ PM_PUSH(0, EVT2)
|
|
|
|
+ PM_PUSH(1, EVT3)
|
|
|
|
+ FP += 4; /* EVT4 */
|
|
|
|
+ PM_PUSH(2, EVT5)
|
|
|
|
+ PM_PUSH(3, EVT6)
|
|
|
|
+ PM_PUSH(4, EVT7)
|
|
|
|
+ PM_PUSH(5, EVT8)
|
|
|
|
+ PM_PUSH_SYNC(5)
|
|
|
|
+
|
|
|
|
+ PM_PUSH(0, EVT9)
|
|
|
|
+ PM_PUSH(1, EVT10)
|
|
|
|
+ PM_PUSH(2, EVT11)
|
|
|
|
+ PM_PUSH(3, EVT12)
|
|
|
|
+ PM_PUSH(4, EVT13)
|
|
|
|
+ PM_PUSH(5, EVT14)
|
|
|
|
+ PM_PUSH(6, EVT15)
|
|
|
|
+
|
|
|
|
+ /* CEC */
|
|
|
|
+ FP = B2;
|
|
|
|
+ PM_PUSH(7, IMASK)
|
|
|
|
+ FP += 4; /* IPEND */
|
|
|
|
+ PM_PUSH(8, ILAT)
|
|
|
|
+ PM_PUSH(9, IPRIO)
|
|
|
|
+
|
|
|
|
+ /* Core Timer */
|
|
|
|
+ FP = B3;
|
|
|
|
+ PM_PUSH(10, TCNTL)
|
|
|
|
+ PM_PUSH(11, TPERIOD)
|
|
|
|
+ PM_PUSH(12, TSCALE)
|
|
|
|
+ PM_PUSH(13, TCOUNT)
|
|
|
|
+ PM_PUSH_SYNC(13)
|
|
|
|
+
|
|
|
|
+ /* Misc non-contiguous registers */
|
|
|
|
+ FP = I0;
|
|
|
|
+ PM_CORE_PUSH(0, DMEM_CONTROL);
|
|
|
|
+ PM_CORE_PUSH(1, IMEM_CONTROL);
|
|
|
|
+ PM_CORE_PUSH(2, TBUFCTL);
|
|
|
|
+ PM_PUSH_SYNC(2)
|
|
|
|
+
|
|
|
|
+ /* DCPLB Addr */
|
|
|
|
+ FP = I1;
|
|
|
|
+ PM_PUSH(0, DCPLB_ADDR0)
|
|
|
|
+ PM_PUSH(1, DCPLB_ADDR1)
|
|
|
|
+ PM_PUSH(2, DCPLB_ADDR2)
|
|
|
|
+ PM_PUSH(3, DCPLB_ADDR3)
|
|
|
|
+ PM_PUSH(4, DCPLB_ADDR4)
|
|
|
|
+ PM_PUSH(5, DCPLB_ADDR5)
|
|
|
|
+ PM_PUSH(6, DCPLB_ADDR6)
|
|
|
|
+ PM_PUSH(7, DCPLB_ADDR7)
|
|
|
|
+ PM_PUSH(8, DCPLB_ADDR8)
|
|
|
|
+ PM_PUSH(9, DCPLB_ADDR9)
|
|
|
|
+ PM_PUSH(10, DCPLB_ADDR10)
|
|
|
|
+ PM_PUSH(11, DCPLB_ADDR11)
|
|
|
|
+ PM_PUSH(12, DCPLB_ADDR12)
|
|
|
|
+ PM_PUSH(13, DCPLB_ADDR13)
|
|
|
|
+ PM_PUSH_SYNC(13)
|
|
|
|
+ PM_PUSH(0, DCPLB_ADDR14)
|
|
|
|
+ PM_PUSH(1, DCPLB_ADDR15)
|
|
|
|
+
|
|
|
|
+ /* DCPLB Data */
|
|
|
|
+ FP = I2;
|
|
|
|
+ PM_PUSH(2, DCPLB_DATA0)
|
|
|
|
+ PM_PUSH(3, DCPLB_DATA1)
|
|
|
|
+ PM_PUSH(4, DCPLB_DATA2)
|
|
|
|
+ PM_PUSH(5, DCPLB_DATA3)
|
|
|
|
+ PM_PUSH(6, DCPLB_DATA4)
|
|
|
|
+ PM_PUSH(7, DCPLB_DATA5)
|
|
|
|
+ PM_PUSH(8, DCPLB_DATA6)
|
|
|
|
+ PM_PUSH(9, DCPLB_DATA7)
|
|
|
|
+ PM_PUSH(10, DCPLB_DATA8)
|
|
|
|
+ PM_PUSH(11, DCPLB_DATA9)
|
|
|
|
+ PM_PUSH(12, DCPLB_DATA10)
|
|
|
|
+ PM_PUSH(13, DCPLB_DATA11)
|
|
|
|
+ PM_PUSH_SYNC(13)
|
|
|
|
+ PM_PUSH(0, DCPLB_DATA12)
|
|
|
|
+ PM_PUSH(1, DCPLB_DATA13)
|
|
|
|
+ PM_PUSH(2, DCPLB_DATA14)
|
|
|
|
+ PM_PUSH(3, DCPLB_DATA15)
|
|
|
|
+
|
|
|
|
+ /* ICPLB Addr */
|
|
|
|
+ FP = I3;
|
|
|
|
+ PM_PUSH(4, ICPLB_ADDR0)
|
|
|
|
+ PM_PUSH(5, ICPLB_ADDR1)
|
|
|
|
+ PM_PUSH(6, ICPLB_ADDR2)
|
|
|
|
+ PM_PUSH(7, ICPLB_ADDR3)
|
|
|
|
+ PM_PUSH(8, ICPLB_ADDR4)
|
|
|
|
+ PM_PUSH(9, ICPLB_ADDR5)
|
|
|
|
+ PM_PUSH(10, ICPLB_ADDR6)
|
|
|
|
+ PM_PUSH(11, ICPLB_ADDR7)
|
|
|
|
+ PM_PUSH(12, ICPLB_ADDR8)
|
|
|
|
+ PM_PUSH(13, ICPLB_ADDR9)
|
|
|
|
+ PM_PUSH_SYNC(13)
|
|
|
|
+ PM_PUSH(0, ICPLB_ADDR10)
|
|
|
|
+ PM_PUSH(1, ICPLB_ADDR11)
|
|
|
|
+ PM_PUSH(2, ICPLB_ADDR12)
|
|
|
|
+ PM_PUSH(3, ICPLB_ADDR13)
|
|
|
|
+ PM_PUSH(4, ICPLB_ADDR14)
|
|
|
|
+ PM_PUSH(5, ICPLB_ADDR15)
|
|
|
|
+
|
|
|
|
+ /* ICPLB Data */
|
|
|
|
+ FP = B0;
|
|
|
|
+ PM_PUSH(6, ICPLB_DATA0)
|
|
|
|
+ PM_PUSH(7, ICPLB_DATA1)
|
|
|
|
+ PM_PUSH(8, ICPLB_DATA2)
|
|
|
|
+ PM_PUSH(9, ICPLB_DATA3)
|
|
|
|
+ PM_PUSH(10, ICPLB_DATA4)
|
|
|
|
+ PM_PUSH(11, ICPLB_DATA5)
|
|
|
|
+ PM_PUSH(12, ICPLB_DATA6)
|
|
|
|
+ PM_PUSH(13, ICPLB_DATA7)
|
|
|
|
+ PM_PUSH_SYNC(13)
|
|
|
|
+ PM_PUSH(0, ICPLB_DATA8)
|
|
|
|
+ PM_PUSH(1, ICPLB_DATA9)
|
|
|
|
+ PM_PUSH(2, ICPLB_DATA10)
|
|
|
|
+ PM_PUSH(3, ICPLB_DATA11)
|
|
|
|
+ PM_PUSH(4, ICPLB_DATA12)
|
|
|
|
+ PM_PUSH(5, ICPLB_DATA13)
|
|
|
|
+ PM_PUSH(6, ICPLB_DATA14)
|
|
|
|
+ PM_PUSH(7, ICPLB_DATA15)
|
|
|
|
+ PM_PUSH_SYNC(7)
|
|
|
|
+ .endm
|
|
|
|
+
|
|
|
|
+ .macro bfin_core_mmr_restore
|
|
|
|
+ /* Restore Core MMRs */
|
|
|
|
+ I0.H = hi(COREMMR_BASE);
|
|
|
|
+ I0.L = lo(COREMMR_BASE);
|
|
|
|
+ I1 = I0;
|
|
|
|
+ I2 = I0;
|
|
|
|
+ I3 = I0;
|
|
|
|
+ B0 = I0;
|
|
|
|
+ B1 = I0;
|
|
|
|
+ B2 = I0;
|
|
|
|
+ B3 = I0;
|
|
|
|
+ I1.L = lo(DCPLB_ADDR15);
|
|
|
|
+ I2.L = lo(DCPLB_DATA15);
|
|
|
|
+ I3.L = lo(ICPLB_ADDR15);
|
|
|
|
+ B0.L = lo(ICPLB_DATA15);
|
|
|
|
+ B1.L = lo(EVT15);
|
|
|
|
+ B2.L = lo(IPRIO);
|
|
|
|
+ B3.L = lo(TCOUNT);
|
|
|
|
+
|
|
|
|
+ /* ICPLB Data */
|
|
|
|
+ FP = B0;
|
|
|
|
+ PM_POP_SYNC(7)
|
|
|
|
+ PM_POP(7, ICPLB_DATA15)
|
|
|
|
+ PM_POP(6, ICPLB_DATA14)
|
|
|
|
+ PM_POP(5, ICPLB_DATA13)
|
|
|
|
+ PM_POP(4, ICPLB_DATA12)
|
|
|
|
+ PM_POP(3, ICPLB_DATA11)
|
|
|
|
+ PM_POP(2, ICPLB_DATA10)
|
|
|
|
+ PM_POP(1, ICPLB_DATA9)
|
|
|
|
+ PM_POP(0, ICPLB_DATA8)
|
|
|
|
+ PM_POP_SYNC(13)
|
|
|
|
+ PM_POP(13, ICPLB_DATA7)
|
|
|
|
+ PM_POP(12, ICPLB_DATA6)
|
|
|
|
+ PM_POP(11, ICPLB_DATA5)
|
|
|
|
+ PM_POP(10, ICPLB_DATA4)
|
|
|
|
+ PM_POP(9, ICPLB_DATA3)
|
|
|
|
+ PM_POP(8, ICPLB_DATA2)
|
|
|
|
+ PM_POP(7, ICPLB_DATA1)
|
|
|
|
+ PM_POP(6, ICPLB_DATA0)
|
|
|
|
+
|
|
|
|
+ /* ICPLB Addr */
|
|
|
|
+ FP = I3;
|
|
|
|
+ PM_POP(5, ICPLB_ADDR15)
|
|
|
|
+ PM_POP(4, ICPLB_ADDR14)
|
|
|
|
+ PM_POP(3, ICPLB_ADDR13)
|
|
|
|
+ PM_POP(2, ICPLB_ADDR12)
|