Revision aa941b94 hw/pxa2xx.c
b/hw/pxa2xx.c | ||
---|---|---|
141 | 141 |
pxa2xx_pm_write, |
142 | 142 |
}; |
143 | 143 |
|
144 |
static void pxa2xx_pm_save(QEMUFile *f, void *opaque) |
|
145 |
{ |
|
146 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
147 |
int i; |
|
148 |
|
|
149 |
for (i = 0; i < 0x40; i ++) |
|
150 |
qemu_put_be32s(f, &s->pm_regs[i]); |
|
151 |
} |
|
152 |
|
|
153 |
static int pxa2xx_pm_load(QEMUFile *f, void *opaque, int version_id) |
|
154 |
{ |
|
155 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
156 |
int i; |
|
157 |
|
|
158 |
for (i = 0; i < 0x40; i ++) |
|
159 |
qemu_get_be32s(f, &s->pm_regs[i]); |
|
160 |
|
|
161 |
return 0; |
|
162 |
} |
|
163 |
|
|
144 | 164 |
#define CCCR 0x00 /* Core Clock Configuration register */ |
145 | 165 |
#define CKEN 0x04 /* Clock Enable register */ |
146 | 166 |
#define OSCC 0x08 /* Oscillator Configuration register */ |
... | ... | |
204 | 224 |
pxa2xx_cm_write, |
205 | 225 |
}; |
206 | 226 |
|
227 |
static void pxa2xx_cm_save(QEMUFile *f, void *opaque) |
|
228 |
{ |
|
229 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
230 |
int i; |
|
231 |
|
|
232 |
for (i = 0; i < 4; i ++) |
|
233 |
qemu_put_be32s(f, &s->cm_regs[i]); |
|
234 |
qemu_put_be32s(f, &s->clkcfg); |
|
235 |
qemu_put_be32s(f, &s->pmnc); |
|
236 |
} |
|
237 |
|
|
238 |
static int pxa2xx_cm_load(QEMUFile *f, void *opaque, int version_id) |
|
239 |
{ |
|
240 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
241 |
int i; |
|
242 |
|
|
243 |
for (i = 0; i < 4; i ++) |
|
244 |
qemu_get_be32s(f, &s->cm_regs[i]); |
|
245 |
qemu_get_be32s(f, &s->clkcfg); |
|
246 |
qemu_get_be32s(f, &s->pmnc); |
|
247 |
|
|
248 |
return 0; |
|
249 |
} |
|
250 |
|
|
207 | 251 |
static uint32_t pxa2xx_clkpwr_read(void *opaque, int op2, int reg, int crm) |
208 | 252 |
{ |
209 | 253 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
... | ... | |
482 | 526 |
pxa2xx_mm_write, |
483 | 527 |
}; |
484 | 528 |
|
529 |
static void pxa2xx_mm_save(QEMUFile *f, void *opaque) |
|
530 |
{ |
|
531 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
532 |
int i; |
|
533 |
|
|
534 |
for (i = 0; i < 0x1a; i ++) |
|
535 |
qemu_put_be32s(f, &s->mm_regs[i]); |
|
536 |
} |
|
537 |
|
|
538 |
static int pxa2xx_mm_load(QEMUFile *f, void *opaque, int version_id) |
|
539 |
{ |
|
540 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
541 |
int i; |
|
542 |
|
|
543 |
for (i = 0; i < 0x1a; i ++) |
|
544 |
qemu_get_be32s(f, &s->mm_regs[i]); |
|
545 |
|
|
546 |
return 0; |
|
547 |
} |
|
548 |
|
|
485 | 549 |
/* Synchronous Serial Ports */ |
486 | 550 |
struct pxa2xx_ssp_s { |
487 | 551 |
target_phys_addr_t base; |
... | ... | |
761 | 825 |
pxa2xx_ssp_write, |
762 | 826 |
}; |
763 | 827 |
|
828 |
static void pxa2xx_ssp_save(QEMUFile *f, void *opaque) |
|
829 |
{ |
|
830 |
struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque; |
|
831 |
int i; |
|
832 |
|
|
833 |
qemu_put_be32(f, s->enable); |
|
834 |
|
|
835 |
qemu_put_be32s(f, &s->sscr[0]); |
|
836 |
qemu_put_be32s(f, &s->sscr[1]); |
|
837 |
qemu_put_be32s(f, &s->sspsp); |
|
838 |
qemu_put_be32s(f, &s->ssto); |
|
839 |
qemu_put_be32s(f, &s->ssitr); |
|
840 |
qemu_put_be32s(f, &s->sssr); |
|
841 |
qemu_put_8s(f, &s->sstsa); |
|
842 |
qemu_put_8s(f, &s->ssrsa); |
|
843 |
qemu_put_8s(f, &s->ssacd); |
|
844 |
|
|
845 |
qemu_put_byte(f, s->rx_level); |
|
846 |
for (i = 0; i < s->rx_level; i ++) |
|
847 |
qemu_put_byte(f, s->rx_fifo[(s->rx_start + i) & 0xf]); |
|
848 |
} |
|
849 |
|
|
850 |
static int pxa2xx_ssp_load(QEMUFile *f, void *opaque, int version_id) |
|
851 |
{ |
|
852 |
struct pxa2xx_ssp_s *s = (struct pxa2xx_ssp_s *) opaque; |
|
853 |
int i; |
|
854 |
|
|
855 |
s->enable = qemu_get_be32(f); |
|
856 |
|
|
857 |
qemu_get_be32s(f, &s->sscr[0]); |
|
858 |
qemu_get_be32s(f, &s->sscr[1]); |
|
859 |
qemu_get_be32s(f, &s->sspsp); |
|
860 |
qemu_get_be32s(f, &s->ssto); |
|
861 |
qemu_get_be32s(f, &s->ssitr); |
|
862 |
qemu_get_be32s(f, &s->sssr); |
|
863 |
qemu_get_8s(f, &s->sstsa); |
|
864 |
qemu_get_8s(f, &s->ssrsa); |
|
865 |
qemu_get_8s(f, &s->ssacd); |
|
866 |
|
|
867 |
s->rx_level = qemu_get_byte(f); |
|
868 |
s->rx_start = 0; |
|
869 |
for (i = 0; i < s->rx_level; i ++) |
|
870 |
s->rx_fifo[i] = qemu_get_byte(f); |
|
871 |
|
|
872 |
return 0; |
|
873 |
} |
|
874 |
|
|
764 | 875 |
/* Real-Time Clock */ |
765 | 876 |
#define RCNR 0x00 /* RTC Counter register */ |
766 | 877 |
#define RTAR 0x04 /* RTC Alarm register */ |
... | ... | |
1052 | 1163 |
} |
1053 | 1164 |
} |
1054 | 1165 |
|
1055 |
static void pxa2xx_rtc_reset(struct pxa2xx_state_s *s) |
|
1166 |
static CPUReadMemoryFunc *pxa2xx_rtc_readfn[] = { |
|
1167 |
pxa2xx_rtc_read, |
|
1168 |
pxa2xx_rtc_read, |
|
1169 |
pxa2xx_rtc_read, |
|
1170 |
}; |
|
1171 |
|
|
1172 |
static CPUWriteMemoryFunc *pxa2xx_rtc_writefn[] = { |
|
1173 |
pxa2xx_rtc_write, |
|
1174 |
pxa2xx_rtc_write, |
|
1175 |
pxa2xx_rtc_write, |
|
1176 |
}; |
|
1177 |
|
|
1178 |
static void pxa2xx_rtc_init(struct pxa2xx_state_s *s) |
|
1056 | 1179 |
{ |
1057 | 1180 |
struct tm *tm; |
1058 | 1181 |
time_t ti; |
... | ... | |
1086 | 1209 |
s->rtc_pi = qemu_new_timer(rt_clock, pxa2xx_rtc_pi_tick, s); |
1087 | 1210 |
} |
1088 | 1211 |
|
1089 |
static CPUReadMemoryFunc *pxa2xx_rtc_readfn[] = { |
|
1090 |
pxa2xx_rtc_read, |
|
1091 |
pxa2xx_rtc_read, |
|
1092 |
pxa2xx_rtc_read, |
|
1093 |
}; |
|
1212 |
static void pxa2xx_rtc_save(QEMUFile *f, void *opaque) |
|
1213 |
{ |
|
1214 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
1094 | 1215 |
|
1095 |
static CPUWriteMemoryFunc *pxa2xx_rtc_writefn[] = { |
|
1096 |
pxa2xx_rtc_write, |
|
1097 |
pxa2xx_rtc_write, |
|
1098 |
pxa2xx_rtc_write, |
|
1099 |
}; |
|
1216 |
pxa2xx_rtc_hzupdate(s); |
|
1217 |
pxa2xx_rtc_piupdate(s); |
|
1218 |
pxa2xx_rtc_swupdate(s); |
|
1219 |
|
|
1220 |
qemu_put_be32s(f, &s->rttr); |
|
1221 |
qemu_put_be32s(f, &s->rtsr); |
|
1222 |
qemu_put_be32s(f, &s->rtar); |
|
1223 |
qemu_put_be32s(f, &s->rdar1); |
|
1224 |
qemu_put_be32s(f, &s->rdar2); |
|
1225 |
qemu_put_be32s(f, &s->ryar1); |
|
1226 |
qemu_put_be32s(f, &s->ryar2); |
|
1227 |
qemu_put_be32s(f, &s->swar1); |
|
1228 |
qemu_put_be32s(f, &s->swar2); |
|
1229 |
qemu_put_be32s(f, &s->piar); |
|
1230 |
qemu_put_be32s(f, &s->last_rcnr); |
|
1231 |
qemu_put_be32s(f, &s->last_rdcr); |
|
1232 |
qemu_put_be32s(f, &s->last_rycr); |
|
1233 |
qemu_put_be32s(f, &s->last_swcr); |
|
1234 |
qemu_put_be32s(f, &s->last_rtcpicr); |
|
1235 |
qemu_put_be64s(f, &s->last_hz); |
|
1236 |
qemu_put_be64s(f, &s->last_sw); |
|
1237 |
qemu_put_be64s(f, &s->last_pi); |
|
1238 |
} |
|
1239 |
|
|
1240 |
static int pxa2xx_rtc_load(QEMUFile *f, void *opaque, int version_id) |
|
1241 |
{ |
|
1242 |
struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque; |
|
1243 |
|
|
1244 |
qemu_get_be32s(f, &s->rttr); |
|
1245 |
qemu_get_be32s(f, &s->rtsr); |
|
1246 |
qemu_get_be32s(f, &s->rtar); |
|
1247 |
qemu_get_be32s(f, &s->rdar1); |
|
1248 |
qemu_get_be32s(f, &s->rdar2); |
|
1249 |
qemu_get_be32s(f, &s->ryar1); |
|
1250 |
qemu_get_be32s(f, &s->ryar2); |
|
1251 |
qemu_get_be32s(f, &s->swar1); |
|
1252 |
qemu_get_be32s(f, &s->swar2); |
|
1253 |
qemu_get_be32s(f, &s->piar); |
|
1254 |
qemu_get_be32s(f, &s->last_rcnr); |
|
1255 |
qemu_get_be32s(f, &s->last_rdcr); |
|
1256 |
qemu_get_be32s(f, &s->last_rycr); |
|
1257 |
qemu_get_be32s(f, &s->last_swcr); |
|
1258 |
qemu_get_be32s(f, &s->last_rtcpicr); |
|
1259 |
qemu_get_be64s(f, &s->last_hz); |
|
1260 |
qemu_get_be64s(f, &s->last_sw); |
|
1261 |
qemu_get_be64s(f, &s->last_pi); |
|
1262 |
|
|
1263 |
pxa2xx_rtc_alarm_update(s, s->rtsr); |
|
1264 |
|
|
1265 |
return 0; |
|
1266 |
} |
|
1100 | 1267 |
|
1101 | 1268 |
/* I2C Interface */ |
1102 | 1269 |
struct pxa2xx_i2c_s { |
... | ... | |
1289 | 1456 |
pxa2xx_i2c_write, |
1290 | 1457 |
}; |
1291 | 1458 |
|
1459 |
static void pxa2xx_i2c_save(QEMUFile *f, void *opaque) |
|
1460 |
{ |
|
1461 |
struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque; |
|
1462 |
|
|
1463 |
qemu_put_be16s(f, &s->control); |
|
1464 |
qemu_put_be16s(f, &s->status); |
|
1465 |
qemu_put_8s(f, &s->ibmr); |
|
1466 |
qemu_put_8s(f, &s->data); |
|
1467 |
|
|
1468 |
i2c_bus_save(f, s->bus); |
|
1469 |
i2c_slave_save(f, &s->slave); |
|
1470 |
} |
|
1471 |
|
|
1472 |
static int pxa2xx_i2c_load(QEMUFile *f, void *opaque, int version_id) |
|
1473 |
{ |
|
1474 |
struct pxa2xx_i2c_s *s = (struct pxa2xx_i2c_s *) opaque; |
|
1475 |
|
|
1476 |
qemu_get_be16s(f, &s->control); |
|
1477 |
qemu_get_be16s(f, &s->status); |
|
1478 |
qemu_get_8s(f, &s->ibmr); |
|
1479 |
qemu_get_8s(f, &s->data); |
|
1480 |
|
|
1481 |
i2c_bus_load(f, s->bus); |
|
1482 |
i2c_slave_load(f, &s->slave); |
|
1483 |
return 0; |
|
1484 |
} |
|
1485 |
|
|
1292 | 1486 |
struct pxa2xx_i2c_s *pxa2xx_i2c_init(target_phys_addr_t base, |
1293 | 1487 |
qemu_irq irq, int ioregister) |
1294 | 1488 |
{ |
... | ... | |
1309 | 1503 |
cpu_register_physical_memory(s->base & 0xfffff000, 0xfff, iomemtype); |
1310 | 1504 |
} |
1311 | 1505 |
|
1506 |
register_savevm("pxa2xx_i2c", base, 0, |
|
1507 |
pxa2xx_i2c_save, pxa2xx_i2c_load, s); |
|
1508 |
|
|
1312 | 1509 |
return s; |
1313 | 1510 |
} |
1314 | 1511 |
|
... | ... | |
1470 | 1667 |
pxa2xx_i2s_write, |
1471 | 1668 |
}; |
1472 | 1669 |
|
1670 |
static void pxa2xx_i2s_save(QEMUFile *f, void *opaque) |
|
1671 |
{ |
|
1672 |
struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque; |
|
1673 |
|
|
1674 |
qemu_put_be32s(f, &s->control[0]); |
|
1675 |
qemu_put_be32s(f, &s->control[1]); |
|
1676 |
qemu_put_be32s(f, &s->status); |
|
1677 |
qemu_put_be32s(f, &s->mask); |
|
1678 |
qemu_put_be32s(f, &s->clk); |
|
1679 |
|
|
1680 |
qemu_put_be32(f, s->enable); |
|
1681 |
qemu_put_be32(f, s->rx_len); |
|
1682 |
qemu_put_be32(f, s->tx_len); |
|
1683 |
qemu_put_be32(f, s->fifo_len); |
|
1684 |
} |
|
1685 |
|
|
1686 |
static int pxa2xx_i2s_load(QEMUFile *f, void *opaque, int version_id) |
|
1687 |
{ |
|
1688 |
struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque; |
|
1689 |
|
|
1690 |
qemu_get_be32s(f, &s->control[0]); |
|
1691 |
qemu_get_be32s(f, &s->control[1]); |
|
1692 |
qemu_get_be32s(f, &s->status); |
|
1693 |
qemu_get_be32s(f, &s->mask); |
|
1694 |
qemu_get_be32s(f, &s->clk); |
|
1695 |
|
|
1696 |
s->enable = qemu_get_be32(f); |
|
1697 |
s->rx_len = qemu_get_be32(f); |
|
1698 |
s->tx_len = qemu_get_be32(f); |
|
1699 |
s->fifo_len = qemu_get_be32(f); |
|
1700 |
|
|
1701 |
return 0; |
|
1702 |
} |
|
1703 |
|
|
1473 | 1704 |
static void pxa2xx_i2s_data_req(void *opaque, int tx, int rx) |
1474 | 1705 |
{ |
1475 | 1706 |
struct pxa2xx_i2s_s *s = (struct pxa2xx_i2s_s *) opaque; |
... | ... | |
1510 | 1741 |
pxa2xx_i2s_writefn, s); |
1511 | 1742 |
cpu_register_physical_memory(s->base & 0xfff00000, 0xfffff, iomemtype); |
1512 | 1743 |
|
1744 |
register_savevm("pxa2xx_i2s", base, 0, |
|
1745 |
pxa2xx_i2s_save, pxa2xx_i2s_load, s); |
|
1746 |
|
|
1513 | 1747 |
return s; |
1514 | 1748 |
} |
1515 | 1749 |
|
... | ... | |
1712 | 1946 |
{ |
1713 | 1947 |
} |
1714 | 1948 |
|
1949 |
static void pxa2xx_fir_save(QEMUFile *f, void *opaque) |
|
1950 |
{ |
|
1951 |
struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque; |
|
1952 |
int i; |
|
1953 |
|
|
1954 |
qemu_put_be32(f, s->enable); |
|
1955 |
|
|
1956 |
qemu_put_8s(f, &s->control[0]); |
|
1957 |
qemu_put_8s(f, &s->control[1]); |
|
1958 |
qemu_put_8s(f, &s->control[2]); |
|
1959 |
qemu_put_8s(f, &s->status[0]); |
|
1960 |
qemu_put_8s(f, &s->status[1]); |
|
1961 |
|
|
1962 |
qemu_put_byte(f, s->rx_len); |
|
1963 |
for (i = 0; i < s->rx_len; i ++) |
|
1964 |
qemu_put_byte(f, s->rx_fifo[(s->rx_start + i) & 63]); |
|
1965 |
} |
|
1966 |
|
|
1967 |
static int pxa2xx_fir_load(QEMUFile *f, void *opaque, int version_id) |
|
1968 |
{ |
|
1969 |
struct pxa2xx_fir_s *s = (struct pxa2xx_fir_s *) opaque; |
|
1970 |
int i; |
|
1971 |
|
|
1972 |
s->enable = qemu_get_be32(f); |
|
1973 |
|
|
1974 |
qemu_get_8s(f, &s->control[0]); |
|
1975 |
qemu_get_8s(f, &s->control[1]); |
|
1976 |
qemu_get_8s(f, &s->control[2]); |
|
1977 |
qemu_get_8s(f, &s->status[0]); |
|
1978 |
qemu_get_8s(f, &s->status[1]); |
|
1979 |
|
|
1980 |
s->rx_len = qemu_get_byte(f); |
|
1981 |
s->rx_start = 0; |
|
1982 |
for (i = 0; i < s->rx_len; i ++) |
|
1983 |
s->rx_fifo[i] = qemu_get_byte(f); |
|
1984 |
|
|
1985 |
return 0; |
|
1986 |
} |
|
1987 |
|
|
1715 | 1988 |
static struct pxa2xx_fir_s *pxa2xx_fir_init(target_phys_addr_t base, |
1716 | 1989 |
qemu_irq irq, struct pxa2xx_dma_state_s *dma, |
1717 | 1990 |
CharDriverState *chr) |
... | ... | |
1735 | 2008 |
qemu_chr_add_handlers(chr, pxa2xx_fir_is_empty, |
1736 | 2009 |
pxa2xx_fir_rx, pxa2xx_fir_event, s); |
1737 | 2010 |
|
2011 |
register_savevm("pxa2xx_fir", 0, 0, pxa2xx_fir_save, pxa2xx_fir_load, s); |
|
2012 |
|
|
1738 | 2013 |
return s; |
1739 | 2014 |
} |
1740 | 2015 |
|
... | ... | |
1763 | 2038 |
|
1764 | 2039 |
s->env = cpu_init(); |
1765 | 2040 |
cpu_arm_set_model(s->env, revision ?: "pxa270"); |
2041 |
register_savevm("cpu", 0, 0, cpu_save, cpu_load, s->env); |
|
1766 | 2042 |
|
1767 | 2043 |
/* SDRAM & Internal Memory Storage */ |
1768 | 2044 |
cpu_register_physical_memory(PXA2XX_SDRAM_BASE, |
... | ... | |
1800 | 2076 |
iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn, |
1801 | 2077 |
pxa2xx_cm_writefn, s); |
1802 | 2078 |
cpu_register_physical_memory(s->cm_base, 0xfff, iomemtype); |
2079 |
register_savevm("pxa2xx_cm", 0, 0, pxa2xx_cm_save, pxa2xx_cm_load, s); |
|
1803 | 2080 |
|
1804 | 2081 |
cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s); |
1805 | 2082 |
|
... | ... | |
1810 | 2087 |
iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn, |
1811 | 2088 |
pxa2xx_mm_writefn, s); |
1812 | 2089 |
cpu_register_physical_memory(s->mm_base, 0xfff, iomemtype); |
2090 |
register_savevm("pxa2xx_mm", 0, 0, pxa2xx_mm_save, pxa2xx_mm_load, s); |
|
1813 | 2091 |
|
1814 | 2092 |
for (i = 0; pxa27x_ssp[i].io_base; i ++); |
1815 | 2093 |
s->ssp = (struct pxa2xx_ssp_s **) |
... | ... | |
1824 | 2102 |
iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn, |
1825 | 2103 |
pxa2xx_ssp_writefn, &ssp[i]); |
1826 | 2104 |
cpu_register_physical_memory(ssp[i].base, 0xfff, iomemtype); |
2105 |
register_savevm("pxa2xx_ssp", i, 0, |
|
2106 |
pxa2xx_ssp_save, pxa2xx_ssp_load, s); |
|
1827 | 2107 |
} |
1828 | 2108 |
|
1829 | 2109 |
if (usb_enabled) { |
... | ... | |
1837 | 2117 |
iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn, |
1838 | 2118 |
pxa2xx_rtc_writefn, s); |
1839 | 2119 |
cpu_register_physical_memory(s->rtc_base, 0xfff, iomemtype); |
1840 |
pxa2xx_rtc_reset(s); |
|
2120 |
pxa2xx_rtc_init(s); |
|
2121 |
register_savevm("pxa2xx_rtc", 0, 0, pxa2xx_rtc_save, pxa2xx_rtc_load, s); |
|
1841 | 2122 |
|
1842 | 2123 |
/* Note that PM registers are in the same page with PWRI2C registers. |
1843 | 2124 |
* As a workaround we don't map PWRI2C into memory and we expect |
... | ... | |
1849 | 2130 |
iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn, |
1850 | 2131 |
pxa2xx_pm_writefn, s); |
1851 | 2132 |
cpu_register_physical_memory(s->pm_base, 0xfff, iomemtype); |
2133 |
register_savevm("pxa2xx_pm", 0, 0, pxa2xx_pm_save, pxa2xx_pm_load, s); |
|
1852 | 2134 |
|
1853 | 2135 |
s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma); |
1854 | 2136 |
|
... | ... | |
1869 | 2151 |
|
1870 | 2152 |
s->env = cpu_init(); |
1871 | 2153 |
cpu_arm_set_model(s->env, "pxa255"); |
2154 |
register_savevm("cpu", 0, 0, cpu_save, cpu_load, s->env); |
|
1872 | 2155 |
|
1873 | 2156 |
/* SDRAM & Internal Memory Storage */ |
1874 | 2157 |
cpu_register_physical_memory(PXA2XX_SDRAM_BASE, sdram_size, |
... | ... | |
1905 | 2188 |
iomemtype = cpu_register_io_memory(0, pxa2xx_cm_readfn, |
1906 | 2189 |
pxa2xx_cm_writefn, s); |
1907 | 2190 |
cpu_register_physical_memory(s->cm_base, 0xfff, iomemtype); |
2191 |
register_savevm("pxa2xx_cm", 0, 0, pxa2xx_cm_save, pxa2xx_cm_load, s); |
|
1908 | 2192 |
|
1909 | 2193 |
cpu_arm_set_cp_io(s->env, 14, pxa2xx_cp14_read, pxa2xx_cp14_write, s); |
1910 | 2194 |
|
... | ... | |
1915 | 2199 |
iomemtype = cpu_register_io_memory(0, pxa2xx_mm_readfn, |
1916 | 2200 |
pxa2xx_mm_writefn, s); |
1917 | 2201 |
cpu_register_physical_memory(s->mm_base, 0xfff, iomemtype); |
2202 |
register_savevm("pxa2xx_mm", 0, 0, pxa2xx_mm_save, pxa2xx_mm_load, s); |
|
1918 | 2203 |
|
1919 | 2204 |
for (i = 0; pxa255_ssp[i].io_base; i ++); |
1920 | 2205 |
s->ssp = (struct pxa2xx_ssp_s **) |
... | ... | |
1929 | 2214 |
iomemtype = cpu_register_io_memory(0, pxa2xx_ssp_readfn, |
1930 | 2215 |
pxa2xx_ssp_writefn, &ssp[i]); |
1931 | 2216 |
cpu_register_physical_memory(ssp[i].base, 0xfff, iomemtype); |
2217 |
register_savevm("pxa2xx_ssp", i, 0, |
|
2218 |
pxa2xx_ssp_save, pxa2xx_ssp_load, s); |
|
1932 | 2219 |
} |
1933 | 2220 |
|
1934 | 2221 |
if (usb_enabled) { |
... | ... | |
1942 | 2229 |
iomemtype = cpu_register_io_memory(0, pxa2xx_rtc_readfn, |
1943 | 2230 |
pxa2xx_rtc_writefn, s); |
1944 | 2231 |
cpu_register_physical_memory(s->rtc_base, 0xfff, iomemtype); |
1945 |
pxa2xx_rtc_reset(s); |
|
2232 |
pxa2xx_rtc_init(s); |
|
2233 |
register_savevm("pxa2xx_rtc", 0, 0, pxa2xx_rtc_save, pxa2xx_rtc_load, s); |
|
1946 | 2234 |
|
1947 | 2235 |
/* Note that PM registers are in the same page with PWRI2C registers. |
1948 | 2236 |
* As a workaround we don't map PWRI2C into memory and we expect |
... | ... | |
1954 | 2242 |
iomemtype = cpu_register_io_memory(0, pxa2xx_pm_readfn, |
1955 | 2243 |
pxa2xx_pm_writefn, s); |
1956 | 2244 |
cpu_register_physical_memory(s->pm_base, 0xfff, iomemtype); |
2245 |
register_savevm("pxa2xx_pm", 0, 0, pxa2xx_pm_save, pxa2xx_pm_load, s); |
|
1957 | 2246 |
|
1958 | 2247 |
s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma); |
1959 | 2248 |
|
Also available in: Unified diff