Commit 1f163b149345225f234216289a958b8ae691de61

Authored by balrog
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 }
... ...