Commit 1f163b149345225f234216289a958b8ae691de61
1 parent
86660795
scoop: GPRR reports the state of GPIO lines (Dmitry Baryshkov).
Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> Signed-off-by: Andrzej Zaborowski <andrew.zaborowski@intel.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5615 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
6 additions
and
9 deletions
hw/zaurus.c
... | ... | @@ -46,7 +46,6 @@ struct scoop_info_s { |
46 | 46 | uint16_t irr; |
47 | 47 | uint16_t imr; |
48 | 48 | uint16_t isr; |
49 | - uint16_t gprr; | |
50 | 49 | }; |
51 | 50 | |
52 | 51 | #define SCOOP_MCR 0x00 |
... | ... | @@ -99,9 +98,8 @@ static uint32_t scoop_readb(void *opaque, target_phys_addr_t addr) |
99 | 98 | case SCOOP_GPCR: |
100 | 99 | return s->gpio_dir; |
101 | 100 | case SCOOP_GPWR: |
102 | - return s->gpio_level; | |
103 | 101 | case SCOOP_GPRR: |
104 | - return s->gprr; | |
102 | + return s->gpio_level; | |
105 | 103 | default: |
106 | 104 | zaurus_printf("Bad register offset " REG_FMT "\n", addr); |
107 | 105 | } |
... | ... | @@ -144,12 +142,10 @@ static void scoop_writeb(void *opaque, target_phys_addr_t addr, uint32_t value) |
144 | 142 | scoop_gpio_handler_update(s); |
145 | 143 | break; |
146 | 144 | case SCOOP_GPWR: |
145 | + case SCOOP_GPRR: /* GPRR is probably R/O in real HW */ | |
147 | 146 | s->gpio_level = value & s->gpio_dir; |
148 | 147 | scoop_gpio_handler_update(s); |
149 | 148 | break; |
150 | - case SCOOP_GPRR: | |
151 | - s->gprr = value; | |
152 | - break; | |
153 | 149 | default: |
154 | 150 | zaurus_printf("Bad register offset " REG_FMT "\n", addr); |
155 | 151 | } |
... | ... | @@ -205,11 +201,11 @@ static void scoop_save(QEMUFile *f, void *opaque) |
205 | 201 | qemu_put_be16s(f, &s->irr); |
206 | 202 | qemu_put_be16s(f, &s->imr); |
207 | 203 | qemu_put_be16s(f, &s->isr); |
208 | - qemu_put_be16s(f, &s->gprr); | |
209 | 204 | } |
210 | 205 | |
211 | 206 | static int scoop_load(QEMUFile *f, void *opaque, int version_id) |
212 | 207 | { |
208 | + uint16_t dummy; | |
213 | 209 | struct scoop_info_s *s = (struct scoop_info_s *) opaque; |
214 | 210 | qemu_get_be16s(f, &s->status); |
215 | 211 | qemu_get_be16s(f, &s->power); |
... | ... | @@ -222,7 +218,8 @@ static int scoop_load(QEMUFile *f, void *opaque, int version_id) |
222 | 218 | qemu_get_be16s(f, &s->irr); |
223 | 219 | qemu_get_be16s(f, &s->imr); |
224 | 220 | qemu_get_be16s(f, &s->isr); |
225 | - qemu_get_be16s(f, &s->gprr); | |
221 | + if (version_id < 1) | |
222 | + qemu_get_be16s(f, &dummy); | |
226 | 223 | |
227 | 224 | return 0; |
228 | 225 | } |
... | ... | @@ -243,7 +240,7 @@ struct scoop_info_s *scoop_init(struct pxa2xx_state_s *cpu, |
243 | 240 | iomemtype = cpu_register_io_memory(0, scoop_readfn, |
244 | 241 | scoop_writefn, s); |
245 | 242 | cpu_register_physical_memory(s->target_base, 0x1000, iomemtype); |
246 | - register_savevm("scoop", instance, 0, scoop_save, scoop_load, s); | |
243 | + register_savevm("scoop", instance, 1, scoop_save, scoop_load, s); | |
247 | 244 | |
248 | 245 | return s; |
249 | 246 | } | ... | ... |