Lines Matching refs:s

93 static inline void omap_eac_interrupt_update(struct omap_eac_s *s)  in omap_eac_interrupt_update()  argument
95 qemu_set_irq(s->irq, (s->codec.config[1] >> 14) & 1); /* AURDI */ in omap_eac_interrupt_update()
98 static inline void omap_eac_in_dmarequest_update(struct omap_eac_s *s) in omap_eac_in_dmarequest_update() argument
100 qemu_set_irq(s->codec.rxdrq, (s->codec.rxavail || s->codec.rxlen) && in omap_eac_in_dmarequest_update()
101 ((s->codec.config[1] >> 12) & 1)); /* DMAREN */ in omap_eac_in_dmarequest_update()
104 static inline void omap_eac_out_dmarequest_update(struct omap_eac_s *s) in omap_eac_out_dmarequest_update() argument
106 qemu_set_irq(s->codec.txdrq, s->codec.txlen < s->codec.txavail && in omap_eac_out_dmarequest_update()
107 ((s->codec.config[1] >> 11) & 1)); /* DMAWEN */ in omap_eac_out_dmarequest_update()
110 static inline void omap_eac_in_refill(struct omap_eac_s *s) in omap_eac_in_refill() argument
112 int left = MIN(EAC_BUF_LEN - s->codec.rxlen, s->codec.rxavail) << 2; in omap_eac_in_refill()
113 int start = ((s->codec.rxoff + s->codec.rxlen) & (EAC_BUF_LEN - 1)) << 2; in omap_eac_in_refill()
116 uint8_t *buf = (uint8_t *) s->codec.rxbuf + start; in omap_eac_in_refill()
120 while (leftwrap && (recv = AUD_read(s->codec.in_voice, buf + start, in omap_eac_in_refill()
126 s->codec.rxavail = 0; in omap_eac_in_refill()
128 s->codec.rxavail -= start >> 2; in omap_eac_in_refill()
129 s->codec.rxlen += start >> 2; in omap_eac_in_refill()
133 while (left && (recv = AUD_read(s->codec.in_voice, in omap_eac_in_refill()
134 (uint8_t *) s->codec.rxbuf + start, in omap_eac_in_refill()
140 s->codec.rxavail = 0; in omap_eac_in_refill()
142 s->codec.rxavail -= start >> 2; in omap_eac_in_refill()
143 s->codec.rxlen += start >> 2; in omap_eac_in_refill()
147 static inline void omap_eac_out_empty(struct omap_eac_s *s) in omap_eac_out_empty() argument
149 int left = s->codec.txlen << 2; in omap_eac_out_empty()
153 while (left && (sent = AUD_write(s->codec.out_voice, in omap_eac_out_empty()
154 (uint8_t *) s->codec.txbuf + start, in omap_eac_out_empty()
161 s->codec.txavail = 0; in omap_eac_out_empty()
162 omap_eac_out_dmarequest_update(s); in omap_eac_out_empty()
166 s->codec.txlen = 0; in omap_eac_out_empty()
171 struct omap_eac_s *s = opaque; in omap_eac_in_cb() local
173 s->codec.rxavail = avail_b >> 2; in omap_eac_in_cb()
174 omap_eac_in_refill(s); in omap_eac_in_cb()
176 omap_eac_in_dmarequest_update(s); in omap_eac_in_cb()
181 struct omap_eac_s *s = opaque; in omap_eac_out_cb() local
183 s->codec.txavail = free_b >> 2; in omap_eac_out_cb()
184 if (s->codec.txlen) in omap_eac_out_cb()
185 omap_eac_out_empty(s); in omap_eac_out_cb()
187 omap_eac_out_dmarequest_update(s); in omap_eac_out_cb()
190 static void omap_eac_enable_update(struct omap_eac_s *s) in omap_eac_enable_update() argument
192 s->codec.enable = !(s->codec.config[1] & 1) && /* EACPWD */ in omap_eac_enable_update()
193 (s->codec.config[1] & 2) && /* AUDEN */ in omap_eac_enable_update()
194 s->codec.hw_enable; in omap_eac_enable_update()
225 static void omap_eac_rate_update(struct omap_eac_s *s) in omap_eac_rate_update() argument
229 fsint[2] = (s->codec.config[3] >> 9) & 0xf; in omap_eac_rate_update()
230 fsint[1] = (s->codec.config[2] >> 0) & 0x7; in omap_eac_rate_update()
231 fsint[0] = (s->codec.config[0] >> 6) & 0x3; in omap_eac_rate_update()
233 s->codec.rate = omap_eac_fsint3[fsint[2]]; in omap_eac_rate_update()
235 s->codec.rate = omap_eac_fsint2[fsint[1]]; in omap_eac_rate_update()
237 s->codec.rate = omap_eac_fsint[fsint[0]]; in omap_eac_rate_update()
240 static void omap_eac_volume_update(struct omap_eac_s *s) in omap_eac_volume_update() argument
245 static void omap_eac_format_update(struct omap_eac_s *s) in omap_eac_format_update() argument
250 if (s->codec.rxlen) in omap_eac_format_update()
251 s->codec.rxlen = 1; in omap_eac_format_update()
253 if (s->codec.in_voice) { in omap_eac_format_update()
254 AUD_set_active_in(s->codec.in_voice, 0); in omap_eac_format_update()
255 AUD_close_in(&s->codec.card, s->codec.in_voice); in omap_eac_format_update()
256 s->codec.in_voice = NULL; in omap_eac_format_update()
258 if (s->codec.out_voice) { in omap_eac_format_update()
259 omap_eac_out_empty(s); in omap_eac_format_update()
260 AUD_set_active_out(s->codec.out_voice, 0); in omap_eac_format_update()
261 AUD_close_out(&s->codec.card, s->codec.out_voice); in omap_eac_format_update()
262 s->codec.out_voice = NULL; in omap_eac_format_update()
263 s->codec.txavail = 0; in omap_eac_format_update()
266 s->codec.txlen = 0; in omap_eac_format_update()
268 omap_eac_enable_update(s); in omap_eac_format_update()
269 if (!s->codec.enable) in omap_eac_format_update()
272 omap_eac_rate_update(s); in omap_eac_format_update()
273 fmt.endianness = ((s->codec.config[0] >> 8) & 1); /* LI_BI */ in omap_eac_format_update()
274 fmt.nchannels = ((s->codec.config[0] >> 10) & 1) ? 2 : 1; /* MN_ST */ in omap_eac_format_update()
275 fmt.freq = s->codec.rate; in omap_eac_format_update()
282 s->codec.in_voice = AUD_open_in(&s->codec.card, s->codec.in_voice, in omap_eac_format_update()
283 "eac.codec.in", s, omap_eac_in_cb, &fmt); in omap_eac_format_update()
284 s->codec.out_voice = AUD_open_out(&s->codec.card, s->codec.out_voice, in omap_eac_format_update()
285 "eac.codec.out", s, omap_eac_out_cb, &fmt); in omap_eac_format_update()
287 omap_eac_volume_update(s); in omap_eac_format_update()
289 AUD_set_active_in(s->codec.in_voice, 1); in omap_eac_format_update()
290 AUD_set_active_out(s->codec.out_voice, 1); in omap_eac_format_update()
293 static void omap_eac_reset(struct omap_eac_s *s) in omap_eac_reset() argument
295 s->sysconfig = 0; in omap_eac_reset()
296 s->config[0] = 0x0c; in omap_eac_reset()
297 s->config[1] = 0x09; in omap_eac_reset()
298 s->config[2] = 0xab; in omap_eac_reset()
299 s->config[3] = 0x03; in omap_eac_reset()
300 s->control = 0x00; in omap_eac_reset()
301 s->address = 0x00; in omap_eac_reset()
302 s->data = 0x0000; in omap_eac_reset()
303 s->vtol = 0x00; in omap_eac_reset()
304 s->vtsl = 0x00; in omap_eac_reset()
305 s->mixer = 0x0000; in omap_eac_reset()
306 s->gain[0] = 0xe7e7; in omap_eac_reset()
307 s->gain[1] = 0x6767; in omap_eac_reset()
308 s->gain[2] = 0x6767; in omap_eac_reset()
309 s->gain[3] = 0x6767; in omap_eac_reset()
310 s->att = 0xce; in omap_eac_reset()
311 s->max[0] = 0; in omap_eac_reset()
312 s->max[1] = 0; in omap_eac_reset()
313 s->max[2] = 0; in omap_eac_reset()
314 s->max[3] = 0; in omap_eac_reset()
315 s->max[4] = 0; in omap_eac_reset()
316 s->max[5] = 0; in omap_eac_reset()
317 s->max[6] = 0; in omap_eac_reset()
319 s->modem.control = 0x00; in omap_eac_reset()
320 s->modem.config = 0x0000; in omap_eac_reset()
321 s->bt.control = 0x00; in omap_eac_reset()
322 s->bt.config = 0x0000; in omap_eac_reset()
323 s->codec.config[0] = 0x0649; in omap_eac_reset()
324 s->codec.config[1] = 0x0000; in omap_eac_reset()
325 s->codec.config[2] = 0x0007; in omap_eac_reset()
326 s->codec.config[3] = 0x1ffc; in omap_eac_reset()
327 s->codec.rxoff = 0; in omap_eac_reset()
328 s->codec.rxlen = 0; in omap_eac_reset()
329 s->codec.txlen = 0; in omap_eac_reset()
330 s->codec.rxavail = 0; in omap_eac_reset()
331 s->codec.txavail = 0; in omap_eac_reset()
333 omap_eac_format_update(s); in omap_eac_reset()
334 omap_eac_interrupt_update(s); in omap_eac_reset()
339 struct omap_eac_s *s = opaque; in omap_eac_read() local
348 return s->config[0]; in omap_eac_read()
350 return s->config[1]; in omap_eac_read()
352 return s->config[2]; in omap_eac_read()
354 return s->config[3]; in omap_eac_read()
357 return s->control | ((s->codec.rxavail + s->codec.rxlen > 0) << 7) | in omap_eac_read()
358 ((s->codec.txlen < s->codec.txavail) << 5); in omap_eac_read()
361 return s->address; in omap_eac_read()
363 return s->data & 0xff; in omap_eac_read()
365 return s->data >> 8; in omap_eac_read()
367 return s->vtol; in omap_eac_read()
369 return s->vtsl | (3 << 5); /* CRDY1 | CRDY2 */ in omap_eac_read()
371 return s->modem.control; in omap_eac_read()
373 return s->modem.config; in omap_eac_read()
375 return s->bt.control; in omap_eac_read()
377 return s->bt.config; in omap_eac_read()
379 return s->mixer; in omap_eac_read()
381 return s->gain[0]; in omap_eac_read()
383 return s->gain[1]; in omap_eac_read()
385 return s->gain[2]; in omap_eac_read()
387 return s->gain[3]; in omap_eac_read()
389 return s->att; in omap_eac_read()
391 return s->max[0]; in omap_eac_read()
393 return s->max[1]; in omap_eac_read()
395 return s->max[2]; in omap_eac_read()
397 return s->max[3]; in omap_eac_read()
399 return s->max[4]; in omap_eac_read()
401 return s->max[5]; in omap_eac_read()
403 return s->max[6]; in omap_eac_read()
408 if (likely(s->codec.rxlen > 1)) { in omap_eac_read()
409 ret = s->codec.rxbuf[s->codec.rxoff ++]; in omap_eac_read()
410 s->codec.rxlen --; in omap_eac_read()
411 s->codec.rxoff &= EAC_BUF_LEN - 1; in omap_eac_read()
413 } else if (s->codec.rxlen) { in omap_eac_read()
414 ret = s->codec.rxbuf[s->codec.rxoff ++]; in omap_eac_read()
415 s->codec.rxlen --; in omap_eac_read()
416 s->codec.rxoff &= EAC_BUF_LEN - 1; in omap_eac_read()
417 if (s->codec.rxavail) in omap_eac_read()
418 omap_eac_in_refill(s); in omap_eac_read()
419 omap_eac_in_dmarequest_update(s); in omap_eac_read()
424 return s->codec.config[0]; in omap_eac_read()
426 return s->codec.config[1] | ((s->codec.config[1] & 2) << 14); in omap_eac_read()
428 return s->codec.config[2]; in omap_eac_read()
430 return s->codec.config[3]; in omap_eac_read()
442 return s->sysconfig; in omap_eac_read()
455 struct omap_eac_s *s = opaque; in omap_eac_write() local
481 s->config[0] = value & 0xff; in omap_eac_write()
482 omap_eac_format_update(s); in omap_eac_write()
485 s->config[1] = value & 0xff; in omap_eac_write()
486 omap_eac_format_update(s); in omap_eac_write()
489 s->config[2] = value & 0xff; in omap_eac_write()
490 omap_eac_format_update(s); in omap_eac_write()
493 s->config[3] = value & 0xff; in omap_eac_write()
494 omap_eac_format_update(s); in omap_eac_write()
499 s->control = value & 0x5f; in omap_eac_write()
500 omap_eac_interrupt_update(s); in omap_eac_write()
504 s->address = value & 0xff; in omap_eac_write()
507 s->data &= 0xff00; in omap_eac_write()
508 s->data |= value & 0xff; in omap_eac_write()
511 s->data &= 0x00ff; in omap_eac_write()
512 s->data |= value << 8; in omap_eac_write()
515 s->vtol = value & 0xf8; in omap_eac_write()
518 s->vtsl = value & 0x9f; in omap_eac_write()
521 s->modem.control = value & 0x8f; in omap_eac_write()
524 s->modem.config = value & 0x7fff; in omap_eac_write()
527 s->bt.control = value & 0x8f; in omap_eac_write()
530 s->bt.config = value & 0x7fff; in omap_eac_write()
533 s->mixer = value & 0x0fff; in omap_eac_write()
536 s->gain[0] = value & 0xffff; in omap_eac_write()
539 s->gain[1] = value & 0xff7f; in omap_eac_write()
542 s->gain[2] = value & 0xff7f; in omap_eac_write()
545 s->gain[3] = value & 0xff7f; in omap_eac_write()
548 s->att = value & 0xff; in omap_eac_write()
552 s->codec.txbuf[s->codec.txlen ++] = value; in omap_eac_write()
553 if (unlikely(s->codec.txlen == EAC_BUF_LEN || in omap_eac_write()
554 s->codec.txlen == s->codec.txavail)) { in omap_eac_write()
555 if (s->codec.txavail) in omap_eac_write()
556 omap_eac_out_empty(s); in omap_eac_write()
558 s->codec.txlen = 0; in omap_eac_write()
563 s->codec.config[0] = value & 0x07ff; in omap_eac_write()
564 omap_eac_format_update(s); in omap_eac_write()
567 s->codec.config[1] = value & 0x780f; in omap_eac_write()
568 omap_eac_format_update(s); in omap_eac_write()
571 s->codec.config[2] = value & 0x003f; in omap_eac_write()
572 omap_eac_format_update(s); in omap_eac_write()
575 s->codec.config[3] = value & 0xffff; in omap_eac_write()
576 omap_eac_format_update(s); in omap_eac_write()
587 omap_eac_reset(s); in omap_eac_write()
588 s->sysconfig = value & 0x31d; in omap_eac_write()
606 struct omap_eac_s *s = g_new0(struct omap_eac_s, 1); in omap_eac_init() local
608 s->irq = irq; in omap_eac_init()
609 s->codec.rxdrq = *drq ++; in omap_eac_init()
610 s->codec.txdrq = *drq; in omap_eac_init()
611 omap_eac_reset(s); in omap_eac_init()
614 s->codec.card.name = g_strdup(current_machine->audiodev); in omap_eac_init()
615 s->codec.card.state = audio_state_by_name(s->codec.card.name, &error_fatal); in omap_eac_init()
617 AUD_register_card("OMAP EAC", &s->codec.card, &error_fatal); in omap_eac_init()
619 memory_region_init_io(&s->iomem, NULL, &omap_eac_ops, s, "omap.eac", in omap_eac_init()
621 omap_l4_attach(ta, 0, &s->iomem); in omap_eac_init()
623 return s; in omap_eac_init()
644 static inline void omap_sti_interrupt_update(struct omap_sti_s *s) in omap_sti_interrupt_update() argument
646 qemu_set_irq(s->irq, s->irqst & s->irqen); in omap_sti_interrupt_update()
649 static void omap_sti_reset(struct omap_sti_s *s) in omap_sti_reset() argument
651 s->sysconfig = 0; in omap_sti_reset()
652 s->irqst = 0; in omap_sti_reset()
653 s->irqen = 0; in omap_sti_reset()
654 s->clkcontrol = 0; in omap_sti_reset()
655 s->serial_config = 0; in omap_sti_reset()
657 omap_sti_interrupt_update(s); in omap_sti_reset()
663 struct omap_sti_s *s = opaque; in omap_sti_read() local
674 return s->sysconfig; in omap_sti_read()
680 return s->irqst; in omap_sti_read()
683 return s->irqen; in omap_sti_read()
691 return s->clkcontrol; in omap_sti_read()
694 return s->serial_config; in omap_sti_read()
704 struct omap_sti_s *s = opaque; in omap_sti_write() local
719 omap_sti_reset(s); in omap_sti_write()
720 s->sysconfig = value & 0xfe; in omap_sti_write()
724 s->irqst &= ~value; in omap_sti_write()
725 omap_sti_interrupt_update(s); in omap_sti_write()
729 s->irqen = value & 0xffff; in omap_sti_write()
730 omap_sti_interrupt_update(s); in omap_sti_write()
734 s->clkcontrol = value & 0xff; in omap_sti_write()
738 s->serial_config = value & 0xff; in omap_sti_write()
767 struct omap_sti_s *s = opaque; in omap_sti_fifo_write() local
780 qemu_chr_fe_write_all(&s->chr, (const uint8_t *) "\r", 1); in omap_sti_fifo_write()
785 qemu_chr_fe_write_all(&s->chr, (const uint8_t *) "\n", 1); in omap_sti_fifo_write()
787 qemu_chr_fe_write_all(&s->chr, &byte, 1); in omap_sti_fifo_write()
803 struct omap_sti_s *s = g_new0(struct omap_sti_s, 1); in omap_sti_init() local
805 s->irq = irq; in omap_sti_init()
806 omap_sti_reset(s); in omap_sti_init()
808 qemu_chr_fe_init(&s->chr, chr ?: qemu_chr_new("null", "null", NULL), in omap_sti_init()
811 memory_region_init_io(&s->iomem, NULL, &omap_sti_ops, s, "omap.sti", in omap_sti_init()
813 omap_l4_attach(ta, 0, &s->iomem); in omap_sti_init()
815 memory_region_init_io(&s->iomem_fifo, NULL, &omap_sti_fifo_ops, s, in omap_sti_init()
817 memory_region_add_subregion(sysmem, channel_base, &s->iomem_fifo); in omap_sti_init()
819 return s; in omap_sti_init()
1054 static void omap_prcm_int_update(struct omap_prcm_s *s, int dom) in omap_prcm_int_update() argument
1056 qemu_set_irq(s->irq[dom], s->irqst[dom] & s->irqen[dom]); in omap_prcm_int_update()
1063 struct omap_prcm_s *s = opaque; in omap_prcm_read() local
1075 return s->sysconfig; in omap_prcm_read()
1078 return s->irqst[0]; in omap_prcm_read()
1081 return s->irqen[0]; in omap_prcm_read()
1084 return s->voltctrl; in omap_prcm_read()
1086 return s->voltctrl & 3; in omap_prcm_read()
1089 return s->clksrc[0]; in omap_prcm_read()
1091 return s->clkout[0]; in omap_prcm_read()
1093 return s->clkemul[0]; in omap_prcm_read()
1099 return s->setuptime[0]; in omap_prcm_read()
1102 return s->setuptime[1]; in omap_prcm_read()
1105 return s->clkpol[0]; in omap_prcm_read()
1127 return s->scratch[(addr - 0xb0) >> 2]; in omap_prcm_read()
1130 return s->clksel[0]; in omap_prcm_read()
1132 return s->clkctrl[0]; in omap_prcm_read()
1135 return s->rst[0]; in omap_prcm_read()
1137 return s->wkup[0]; in omap_prcm_read()
1139 return s->ev; in omap_prcm_read()
1141 return s->evtime[0]; in omap_prcm_read()
1143 return s->evtime[1]; in omap_prcm_read()
1145 return s->power[0]; in omap_prcm_read()
1150 return s->clken[0]; in omap_prcm_read()
1152 return s->clken[1]; in omap_prcm_read()
1154 return s->clken[2]; in omap_prcm_read()
1156 return s->clken[3]; in omap_prcm_read()
1158 return s->clken[4]; in omap_prcm_read()
1171 return s->clkidle[0]; in omap_prcm_read()
1173 return s->clkidle[1]; in omap_prcm_read()
1175 return s->clkidle[2]; in omap_prcm_read()
1177 return s->clkidle[3]; in omap_prcm_read()
1180 return s->clksel[1]; in omap_prcm_read()
1182 return s->clksel[2]; in omap_prcm_read()
1185 return s->clkctrl[1]; in omap_prcm_read()
1188 return s->wken[0]; in omap_prcm_read()
1190 return s->wken[1]; in omap_prcm_read()
1193 return s->wkst[0]; in omap_prcm_read()
1195 return s->wkst[1]; in omap_prcm_read()
1200 return s->power[1]; in omap_prcm_read()
1202 return 0x000030 | (s->power[1] & 0xfc00); in omap_prcm_read()
1205 return s->clken[5]; in omap_prcm_read()
1207 return s->clken[6]; in omap_prcm_read()
1212 return s->clksel[3]; in omap_prcm_read()
1214 return s->clkctrl[2]; in omap_prcm_read()
1216 return s->rstctrl[0]; in omap_prcm_read()
1218 return s->rst[1]; in omap_prcm_read()
1220 return s->wkup[1]; in omap_prcm_read()
1223 return s->power[2]; in omap_prcm_read()
1225 return s->power[2] & 3; in omap_prcm_read()
1228 return s->clken[7]; in omap_prcm_read()
1230 return s->clken[8]; in omap_prcm_read()
1235 return s->clkidle[4]; in omap_prcm_read()
1237 return s->clksel[4]; in omap_prcm_read()
1241 return s->rsttime_wkup; in omap_prcm_read()
1243 return s->rst[2]; in omap_prcm_read()
1245 return s->wken[2]; in omap_prcm_read()
1247 return s->wkst[2]; in omap_prcm_read()
1250 return s->clken[9]; in omap_prcm_read()
1252 ret = 0x0000070 | (s->apll_lock[0] << 9) | (s->apll_lock[1] << 8); in omap_prcm_read()
1253 if (!(s->clksel[6] & 3)) in omap_prcm_read()
1256 else if (!s->dpll_lock) in omap_prcm_read()
1264 return s->clkidle[5]; in omap_prcm_read()
1266 return s->clksel[5]; in omap_prcm_read()
1268 return s->clksel[6]; in omap_prcm_read()
1271 return s->clken[10]; in omap_prcm_read()
1273 return s->clken[11]; in omap_prcm_read()
1278 return s->clkidle[6]; in omap_prcm_read()
1280 return s->clksel[7]; in omap_prcm_read()
1282 return s->clkctrl[3]; in omap_prcm_read()
1286 return s->rst[3]; in omap_prcm_read()
1288 return s->wkup[2]; in omap_prcm_read()
1290 return s->power[3]; in omap_prcm_read()
1292 return 0x008030 | (s->power[3] & 0x3003); in omap_prcm_read()
1295 return s->irqst[1]; in omap_prcm_read()
1297 return s->irqen[1]; in omap_prcm_read()
1300 return s->irqst[2]; in omap_prcm_read()
1302 return s->irqen[2]; in omap_prcm_read()
1309 static void omap_prcm_apll_update(struct omap_prcm_s *s) in omap_prcm_apll_update() argument
1313 mode[0] = (s->clken[9] >> 6) & 3; in omap_prcm_apll_update()
1314 s->apll_lock[0] = (mode[0] == 3); in omap_prcm_apll_update()
1315 mode[1] = (s->clken[9] >> 2) & 3; in omap_prcm_apll_update()
1316 s->apll_lock[1] = (mode[1] == 3); in omap_prcm_apll_update()
1324 static void omap_prcm_dpll_update(struct omap_prcm_s *s) in omap_prcm_dpll_update() argument
1326 omap_clk dpll = omap_findclk(s->mpu, "dpll"); in omap_prcm_dpll_update()
1327 omap_clk dpll_x2 = omap_findclk(s->mpu, "dpll"); in omap_prcm_dpll_update()
1328 omap_clk core = omap_findclk(s->mpu, "core_clk"); in omap_prcm_dpll_update()
1329 int mode = (s->clken[9] >> 0) & 3; in omap_prcm_dpll_update()
1332 mult = (s->clksel[5] >> 12) & 0x3ff; in omap_prcm_dpll_update()
1333 div = (s->clksel[5] >> 8) & 0xf; in omap_prcm_dpll_update()
1337 s->dpll_lock = 0; in omap_prcm_dpll_update()
1348 s->dpll_lock = 1; /* After 20 FINT cycles (ref_clk / (div + 1)). */ in omap_prcm_dpll_update()
1355 switch ((s->clksel[6] >> 0) & 3) { in omap_prcm_dpll_update()
1357 omap_clk_reparent(core, omap_findclk(s->mpu, "clk32-kHz")); in omap_prcm_dpll_update()
1375 struct omap_prcm_s *s = opaque; in omap_prcm_write() local
1402 s->sysconfig = value & 1; in omap_prcm_write()
1406 s->irqst[0] &= ~value; in omap_prcm_write()
1407 omap_prcm_int_update(s, 0); in omap_prcm_write()
1410 s->irqen[0] = value & 0x3f; in omap_prcm_write()
1411 omap_prcm_int_update(s, 0); in omap_prcm_write()
1415 s->voltctrl = value & 0xf1c3; in omap_prcm_write()
1419 s->clksrc[0] = value & 0xdb; in omap_prcm_write()
1424 s->clkout[0] = value & 0xbbbb; in omap_prcm_write()
1429 s->clkemul[0] = value & 1; in omap_prcm_write()
1437 s->setuptime[0] = value & 0xffff; in omap_prcm_write()
1440 s->setuptime[1] = value & 0xffff; in omap_prcm_write()
1444 s->clkpol[0] = value & 0x701; in omap_prcm_write()
1467 s->scratch[(addr - 0xb0) >> 2] = value; in omap_prcm_write()
1471 s->clksel[0] = value & 0x1f; in omap_prcm_write()
1475 s->clkctrl[0] = value & 0x1f; in omap_prcm_write()
1479 s->rst[0] &= ~value; in omap_prcm_write()
1482 s->wkup[0] = value & 0x15; in omap_prcm_write()
1486 s->ev = value & 0x1f; in omap_prcm_write()
1489 s->evtime[0] = value; in omap_prcm_write()
1492 s->evtime[1] = value; in omap_prcm_write()
1496 s->power[0] = value & 0xc0f; in omap_prcm_write()
1500 s->clken[0] = value & 0xbfffffff; in omap_prcm_write()
1505 s->clken[1] = value & 0x00000007; in omap_prcm_write()
1509 s->clken[2] = value & 0xfffffff9; in omap_prcm_write()
1514 s->clken[3] = value & 0x00000007; in omap_prcm_write()
1518 s->clken[4] = value & 0x0000001f; in omap_prcm_write()
1523 s->clkidle[0] = value & 0xfffffff9; in omap_prcm_write()
1527 s->clkidle[1] = value & 0x00000007; in omap_prcm_write()
1531 s->clkidle[2] = value & 0x00000007; in omap_prcm_write()
1535 s->clkidle[3] = value & 0x0000001f; in omap_prcm_write()
1540 s->clksel[1] = value & 0x0fffbf7f; in omap_prcm_write()
1545 s->clksel[2] = value & 0x00fffffc; in omap_prcm_write()
1550 s->clkctrl[1] = value & 0x7; in omap_prcm_write()
1554 s->wken[0] = value & 0x04667ff8; in omap_prcm_write()
1557 s->wken[1] = value & 0x00000005; in omap_prcm_write()
1561 s->wkst[0] &= ~value; in omap_prcm_write()
1564 s->wkst[1] &= ~value; in omap_prcm_write()
1568 s->power[1] = (value & 0x00fc3f) | (1 << 2); in omap_prcm_write()
1572 s->clken[5] = value & 6; in omap_prcm_write()
1576 s->clken[6] = value & 1; in omap_prcm_write()
1580 s->clksel[3] = value & 7; in omap_prcm_write()
1584 s->clkctrl[2] = value & 1; in omap_prcm_write()
1587 s->rstctrl[0] = value & 1; in omap_prcm_write()
1591 s->rst[1] &= ~value; in omap_prcm_write()
1594 s->wkup[1] = value & 0x13; in omap_prcm_write()
1597 s->power[2] = (value & 0x00c0f) | (3 << 2); in omap_prcm_write()
1601 s->clken[7] = value & 0xd; in omap_prcm_write()
1605 s->clken[8] = value & 0x3f; in omap_prcm_write()
1609 s->clkidle[4] = value & 0x0000003f; in omap_prcm_write()
1613 s->clksel[4] = value & 3; in omap_prcm_write()
1622 s->rsttime_wkup = value & 0x1fff; in omap_prcm_write()
1625 s->rst[2] &= ~value; in omap_prcm_write()
1628 s->wken[2] = value & 0x00000005; in omap_prcm_write()
1631 s->wkst[2] &= ~value; in omap_prcm_write()
1638 if ((s->clken[9] ^ value) & 0xcc) { in omap_prcm_write()
1639 s->clken[9] &= ~0xcc; in omap_prcm_write()
1640 s->clken[9] |= value & 0xcc; in omap_prcm_write()
1641 omap_prcm_apll_update(s); in omap_prcm_write()
1643 if ((s->clken[9] ^ value) & 3) { in omap_prcm_write()
1644 s->clken[9] &= ~3; in omap_prcm_write()
1645 s->clken[9] |= value & 3; in omap_prcm_write()
1646 omap_prcm_dpll_update(s); in omap_prcm_write()
1650 s->clkidle[5] = value & 0x000000cf; in omap_prcm_write()
1657 if ((s->clksel[5] ^ value) & 0x003fff00) { in omap_prcm_write()
1658 s->clksel[5] = value & 0x03bfff28; in omap_prcm_write()
1659 omap_prcm_dpll_update(s); in omap_prcm_write()
1663 s->clksel[5] = value & 0x03bfff28; in omap_prcm_write()
1669 if (s->clksel[6] != (value & 3)) { in omap_prcm_write()
1670 s->clksel[6] = value & 3; in omap_prcm_write()
1671 omap_prcm_dpll_update(s); in omap_prcm_write()
1676 s->clken[10] = value & 0x501; in omap_prcm_write()
1680 s->clken[11] = value & 0x2; in omap_prcm_write()
1684 s->clkidle[6] = value & 0x2; in omap_prcm_write()
1688 s->clksel[7] = value & 0x3fff; in omap_prcm_write()
1692 s->clkctrl[3] = value & 0x101; in omap_prcm_write()
1698 s->rst[3] &= ~value; in omap_prcm_write()
1701 s->wkup[2] = value & 0x13; in omap_prcm_write()
1704 s->power[3] = (value & 0x03017) | (3 << 2); in omap_prcm_write()
1708 s->irqst[1] &= ~value; in omap_prcm_write()
1709 omap_prcm_int_update(s, 1); in omap_prcm_write()
1712 s->irqen[1] = value & 0x7; in omap_prcm_write()
1713 omap_prcm_int_update(s, 1); in omap_prcm_write()
1717 s->irqst[2] &= ~value; in omap_prcm_write()
1718 omap_prcm_int_update(s, 2); in omap_prcm_write()
1721 s->irqen[2] = value & 0x7; in omap_prcm_write()
1722 omap_prcm_int_update(s, 2); in omap_prcm_write()
1737 static void omap_prcm_reset(struct omap_prcm_s *s) in omap_prcm_reset() argument
1739 s->sysconfig = 0; in omap_prcm_reset()
1740 s->irqst[0] = 0; in omap_prcm_reset()
1741 s->irqst[1] = 0; in omap_prcm_reset()
1742 s->irqst[2] = 0; in omap_prcm_reset()
1743 s->irqen[0] = 0; in omap_prcm_reset()
1744 s->irqen[1] = 0; in omap_prcm_reset()
1745 s->irqen[2] = 0; in omap_prcm_reset()
1746 s->voltctrl = 0x1040; in omap_prcm_reset()
1747 s->ev = 0x14; in omap_prcm_reset()
1748 s->evtime[0] = 0; in omap_prcm_reset()
1749 s->evtime[1] = 0; in omap_prcm_reset()
1750 s->clkctrl[0] = 0; in omap_prcm_reset()
1751 s->clkctrl[1] = 0; in omap_prcm_reset()
1752 s->clkctrl[2] = 0; in omap_prcm_reset()
1753 s->clkctrl[3] = 0; in omap_prcm_reset()
1754 s->clken[1] = 7; in omap_prcm_reset()
1755 s->clken[3] = 7; in omap_prcm_reset()
1756 s->clken[4] = 0; in omap_prcm_reset()
1757 s->clken[5] = 0; in omap_prcm_reset()
1758 s->clken[6] = 0; in omap_prcm_reset()
1759 s->clken[7] = 0xc; in omap_prcm_reset()
1760 s->clken[8] = 0x3e; in omap_prcm_reset()
1761 s->clken[9] = 0x0d; in omap_prcm_reset()
1762 s->clken[10] = 0; in omap_prcm_reset()
1763 s->clken[11] = 0; in omap_prcm_reset()
1764 s->clkidle[0] = 0; in omap_prcm_reset()
1765 s->clkidle[2] = 7; in omap_prcm_reset()
1766 s->clkidle[3] = 0; in omap_prcm_reset()
1767 s->clkidle[4] = 0; in omap_prcm_reset()
1768 s->clkidle[5] = 0x0c; in omap_prcm_reset()
1769 s->clkidle[6] = 0; in omap_prcm_reset()
1770 s->clksel[0] = 0x01; in omap_prcm_reset()
1771 s->clksel[1] = 0x02100121; in omap_prcm_reset()
1772 s->clksel[2] = 0x00000000; in omap_prcm_reset()
1773 s->clksel[3] = 0x01; in omap_prcm_reset()
1774 s->clksel[4] = 0; in omap_prcm_reset()
1775 s->clksel[7] = 0x0121; in omap_prcm_reset()
1776 s->wkup[0] = 0x15; in omap_prcm_reset()
1777 s->wkup[1] = 0x13; in omap_prcm_reset()
1778 s->wkup[2] = 0x13; in omap_prcm_reset()
1779 s->wken[0] = 0x04667ff8; in omap_prcm_reset()
1780 s->wken[1] = 0x00000005; in omap_prcm_reset()
1781 s->wken[2] = 5; in omap_prcm_reset()
1782 s->wkst[0] = 0; in omap_prcm_reset()
1783 s->wkst[1] = 0; in omap_prcm_reset()
1784 s->wkst[2] = 0; in omap_prcm_reset()
1785 s->power[0] = 0x00c; in omap_prcm_reset()
1786 s->power[1] = 4; in omap_prcm_reset()
1787 s->power[2] = 0x0000c; in omap_prcm_reset()
1788 s->power[3] = 0x14; in omap_prcm_reset()
1789 s->rstctrl[0] = 1; in omap_prcm_reset()
1790 s->rst[3] = 1; in omap_prcm_reset()
1791 omap_prcm_apll_update(s); in omap_prcm_reset()
1792 omap_prcm_dpll_update(s); in omap_prcm_reset()
1795 static void omap_prcm_coldreset(struct omap_prcm_s *s) in omap_prcm_coldreset() argument
1797 s->setuptime[0] = 0; in omap_prcm_coldreset()
1798 s->setuptime[1] = 0; in omap_prcm_coldreset()
1799 memset(&s->scratch, 0, sizeof(s->scratch)); in omap_prcm_coldreset()
1800 s->rst[0] = 0x01; in omap_prcm_coldreset()
1801 s->rst[1] = 0x00; in omap_prcm_coldreset()
1802 s->rst[2] = 0x01; in omap_prcm_coldreset()
1803 s->clken[0] = 0; in omap_prcm_coldreset()
1804 s->clken[2] = 0; in omap_prcm_coldreset()
1805 s->clkidle[1] = 0; in omap_prcm_coldreset()
1806 s->clksel[5] = 0; in omap_prcm_coldreset()
1807 s->clksel[6] = 2; in omap_prcm_coldreset()
1808 s->clksrc[0] = 0x43; in omap_prcm_coldreset()
1809 s->clkout[0] = 0x0303; in omap_prcm_coldreset()
1810 s->clkemul[0] = 0; in omap_prcm_coldreset()
1811 s->clkpol[0] = 0x100; in omap_prcm_coldreset()
1812 s->rsttime_wkup = 0x1002; in omap_prcm_coldreset()
1814 omap_prcm_reset(s); in omap_prcm_coldreset()
1821 struct omap_prcm_s *s = g_new0(struct omap_prcm_s, 1); in omap_prcm_init() local
1823 s->irq[0] = mpu_int; in omap_prcm_init()
1824 s->irq[1] = dsp_int; in omap_prcm_init()
1825 s->irq[2] = iva_int; in omap_prcm_init()
1826 s->mpu = mpu; in omap_prcm_init()
1827 omap_prcm_coldreset(s); in omap_prcm_init()
1829 memory_region_init_io(&s->iomem0, NULL, &omap_prcm_ops, s, "omap.pcrm0", in omap_prcm_init()
1831 memory_region_init_io(&s->iomem1, NULL, &omap_prcm_ops, s, "omap.pcrm1", in omap_prcm_init()
1833 omap_l4_attach(ta, 0, &s->iomem0); in omap_prcm_init()
1834 omap_l4_attach(ta, 1, &s->iomem1); in omap_prcm_init()
1836 return s; in omap_prcm_init()
1855 struct omap_sysctl_s *s = opaque; in omap_sysctl_read8() local
1864 value = s->padconf[pad_offset]; in omap_sysctl_read8()
1879 struct omap_sysctl_s *s = opaque; in omap_sysctl_read() local
1886 return s->sysconfig; in omap_sysctl_read()
1889 return s->padconf[(addr - 0x30) >> 2]; in omap_sysctl_read()
1892 return s->obs; in omap_sysctl_read()
1895 return s->devconfig; in omap_sysctl_read()
1901 return s->msuspendmux[0]; in omap_sysctl_read()
1903 return s->msuspendmux[1]; in omap_sysctl_read()
1905 return s->msuspendmux[2]; in omap_sysctl_read()
1907 return s->msuspendmux[3]; in omap_sysctl_read()
1909 return s->msuspendmux[4]; in omap_sysctl_read()
1914 return s->psaconfig; in omap_sysctl_read()
1979 struct omap_sysctl_s *s = opaque; in omap_sysctl_write8() local
1988 prev_value = s->padconf[pad_offset]; in omap_sysctl_write8()
1991 s->padconf[pad_offset] = prev_value; in omap_sysctl_write8()
2002 struct omap_sysctl_s *s = opaque; in omap_sysctl_write() local
2034 s->sysconfig = value & 0x1e; in omap_sysctl_write()
2039 s->padconf[(addr - 0x30) >> 2] = value & 0x1f1f1f1f; in omap_sysctl_write()
2043 s->obs = value & 0xff; in omap_sysctl_write()
2047 s->devconfig = value & 0xffffc7ff; in omap_sysctl_write()
2054 s->msuspendmux[0] = value & 0x3fffffff; in omap_sysctl_write()
2057 s->msuspendmux[1] = value & 0x3fffffff; in omap_sysctl_write()
2060 s->msuspendmux[2] = value & 0x3fffffff; in omap_sysctl_write()
2063 s->msuspendmux[3] = value & 0x3fffffff; in omap_sysctl_write()
2066 s->msuspendmux[4] = value & 0x3fffffff; in omap_sysctl_write()
2070 s->psaconfig = value & 0x1c; in omap_sysctl_write()
2071 s->psaconfig |= (value & 0x20) ? 2 : 1; in omap_sysctl_write()
2135 static void omap_sysctl_reset(struct omap_sysctl_s *s) in omap_sysctl_reset() argument
2138 s->sysconfig = 0; in omap_sysctl_reset()
2139 s->obs = 0; in omap_sysctl_reset()
2140 s->devconfig = 0x0c000000; in omap_sysctl_reset()
2141 s->msuspendmux[0] = 0x00000000; in omap_sysctl_reset()
2142 s->msuspendmux[1] = 0x00000000; in omap_sysctl_reset()
2143 s->msuspendmux[2] = 0x00000000; in omap_sysctl_reset()
2144 s->msuspendmux[3] = 0x00000000; in omap_sysctl_reset()
2145 s->msuspendmux[4] = 0x00000000; in omap_sysctl_reset()
2146 s->psaconfig = 1; in omap_sysctl_reset()
2148 s->padconf[0x00] = 0x000f0f0f; in omap_sysctl_reset()
2149 s->padconf[0x01] = 0x00000000; in omap_sysctl_reset()
2150 s->padconf[0x02] = 0x00000000; in omap_sysctl_reset()
2151 s->padconf[0x03] = 0x00000000; in omap_sysctl_reset()
2152 s->padconf[0x04] = 0x00000000; in omap_sysctl_reset()
2153 s->padconf[0x05] = 0x00000000; in omap_sysctl_reset()
2154 s->padconf[0x06] = 0x00000000; in omap_sysctl_reset()
2155 s->padconf[0x07] = 0x00000000; in omap_sysctl_reset()
2156 s->padconf[0x08] = 0x08080800; in omap_sysctl_reset()
2157 s->padconf[0x09] = 0x08080808; in omap_sysctl_reset()
2158 s->padconf[0x0a] = 0x08080808; in omap_sysctl_reset()
2159 s->padconf[0x0b] = 0x08080808; in omap_sysctl_reset()
2160 s->padconf[0x0c] = 0x08080808; in omap_sysctl_reset()
2161 s->padconf[0x0d] = 0x08080800; in omap_sysctl_reset()
2162 s->padconf[0x0e] = 0x08080808; in omap_sysctl_reset()
2163 s->padconf[0x0f] = 0x08080808; in omap_sysctl_reset()
2164 s->padconf[0x10] = 0x18181808; /* | 0x07070700 if SBoot3 */ in omap_sysctl_reset()
2165 s->padconf[0x11] = 0x18181818; /* | 0x07070707 if SBoot3 */ in omap_sysctl_reset()
2166 s->padconf[0x12] = 0x18181818; /* | 0x07070707 if SBoot3 */ in omap_sysctl_reset()
2167 s->padconf[0x13] = 0x18181818; /* | 0x07070707 if SBoot3 */ in omap_sysctl_reset()
2168 s->padconf[0x14] = 0x18181818; /* | 0x00070707 if SBoot3 */ in omap_sysctl_reset()
2169 s->padconf[0x15] = 0x18181818; in omap_sysctl_reset()
2170 s->padconf[0x16] = 0x18181818; /* | 0x07000000 if SBoot3 */ in omap_sysctl_reset()
2171 s->padconf[0x17] = 0x1f001f00; in omap_sysctl_reset()
2172 s->padconf[0x18] = 0x1f1f1f1f; in omap_sysctl_reset()
2173 s->padconf[0x19] = 0x00000000; in omap_sysctl_reset()
2174 s->padconf[0x1a] = 0x1f180000; in omap_sysctl_reset()
2175 s->padconf[0x1b] = 0x00001f1f; in omap_sysctl_reset()
2176 s->padconf[0x1c] = 0x1f001f00; in omap_sysctl_reset()
2177 s->padconf[0x1d] = 0x00000000; in omap_sysctl_reset()
2178 s->padconf[0x1e] = 0x00000000; in omap_sysctl_reset()
2179 s->padconf[0x1f] = 0x08000000; in omap_sysctl_reset()
2180 s->padconf[0x20] = 0x08080808; in omap_sysctl_reset()
2181 s->padconf[0x21] = 0x08080808; in omap_sysctl_reset()
2182 s->padconf[0x22] = 0x0f080808; in omap_sysctl_reset()
2183 s->padconf[0x23] = 0x0f0f0f0f; in omap_sysctl_reset()
2184 s->padconf[0x24] = 0x000f0f0f; in omap_sysctl_reset()
2185 s->padconf[0x25] = 0x1f1f1f0f; in omap_sysctl_reset()
2186 s->padconf[0x26] = 0x080f0f1f; in omap_sysctl_reset()
2187 s->padconf[0x27] = 0x070f1808; in omap_sysctl_reset()
2188 s->padconf[0x28] = 0x0f070707; in omap_sysctl_reset()
2189 s->padconf[0x29] = 0x000f0f1f; in omap_sysctl_reset()
2190 s->padconf[0x2a] = 0x0f0f0f1f; in omap_sysctl_reset()
2191 s->padconf[0x2b] = 0x08000000; in omap_sysctl_reset()
2192 s->padconf[0x2c] = 0x0000001f; in omap_sysctl_reset()
2193 s->padconf[0x2d] = 0x0f0f1f00; in omap_sysctl_reset()
2194 s->padconf[0x2e] = 0x1f1f0f0f; in omap_sysctl_reset()
2195 s->padconf[0x2f] = 0x0f1f1f1f; in omap_sysctl_reset()
2196 s->padconf[0x30] = 0x0f0f0f0f; in omap_sysctl_reset()
2197 s->padconf[0x31] = 0x0f1f0f1f; in omap_sysctl_reset()
2198 s->padconf[0x32] = 0x0f0f0f0f; in omap_sysctl_reset()
2199 s->padconf[0x33] = 0x0f1f0f1f; in omap_sysctl_reset()
2200 s->padconf[0x34] = 0x1f1f0f0f; in omap_sysctl_reset()
2201 s->padconf[0x35] = 0x0f0f1f1f; in omap_sysctl_reset()
2202 s->padconf[0x36] = 0x0f0f1f0f; in omap_sysctl_reset()
2203 s->padconf[0x37] = 0x0f0f0f0f; in omap_sysctl_reset()
2204 s->padconf[0x38] = 0x1f18180f; in omap_sysctl_reset()
2205 s->padconf[0x39] = 0x1f1f1f1f; in omap_sysctl_reset()
2206 s->padconf[0x3a] = 0x00001f1f; in omap_sysctl_reset()
2207 s->padconf[0x3b] = 0x00000000; in omap_sysctl_reset()
2208 s->padconf[0x3c] = 0x00000000; in omap_sysctl_reset()
2209 s->padconf[0x3d] = 0x0f0f0f0f; in omap_sysctl_reset()
2210 s->padconf[0x3e] = 0x18000f0f; in omap_sysctl_reset()
2211 s->padconf[0x3f] = 0x00070000; in omap_sysctl_reset()
2212 s->padconf[0x40] = 0x00000707; in omap_sysctl_reset()
2213 s->padconf[0x41] = 0x0f1f0700; in omap_sysctl_reset()
2214 s->padconf[0x42] = 0x1f1f070f; in omap_sysctl_reset()
2215 s->padconf[0x43] = 0x0008081f; in omap_sysctl_reset()
2216 s->padconf[0x44] = 0x00000800; in omap_sysctl_reset()
2222 struct omap_sysctl_s *s = g_new0(struct omap_sysctl_s, 1); in omap_sysctl_init() local
2224 s->mpu = mpu; in omap_sysctl_init()
2225 omap_sysctl_reset(s); in omap_sysctl_init()
2227 memory_region_init_io(&s->iomem, NULL, &omap_sysctl_ops, s, "omap.sysctl", in omap_sysctl_init()
2229 omap_l4_attach(ta, 0, &s->iomem); in omap_sysctl_init()
2231 return s; in omap_sysctl_init()
2267 static int omap2_validate_addr(struct omap_mpu_state_s *s, in omap2_validate_addr() argument
2283 struct omap_mpu_state_s *s = g_new0(struct omap_mpu_state_s, 1); in omap2420_mpu_init() local
2292 s->mpu_model = omap2420; in omap2420_mpu_init()
2293 s->cpu = ARM_CPU(cpu_create(cpu_type)); in omap2420_mpu_init()
2294 s->sram_size = OMAP242X_SRAM_SIZE; in omap2420_mpu_init()
2296 s->wakeup = qemu_allocate_irq(omap_mpu_wakeup, s, 0); in omap2420_mpu_init()
2299 omap_clk_init(s); in omap2420_mpu_init()
2302 memory_region_init_ram(&s->sram, NULL, "omap2.sram", s->sram_size, in omap2420_mpu_init()
2304 memory_region_add_subregion(sysmem, OMAP2_SRAM_BASE, &s->sram); in omap2420_mpu_init()
2306 s->l4 = omap_l4_init(sysmem, OMAP2_L4_BASE, 54); in omap2420_mpu_init()
2309 s->ih[0] = qdev_new("omap2-intc"); in omap2420_mpu_init()
2310 qdev_prop_set_uint8(s->ih[0], "revision", 0x21); in omap2420_mpu_init()
2311 omap_intc_set_fclk(OMAP_INTC(s->ih[0]), omap_findclk(s, "mpu_intc_fclk")); in omap2420_mpu_init()
2312 omap_intc_set_iclk(OMAP_INTC(s->ih[0]), omap_findclk(s, "mpu_intc_iclk")); in omap2420_mpu_init()
2313 busdev = SYS_BUS_DEVICE(s->ih[0]); in omap2420_mpu_init()
2316 qdev_get_gpio_in(DEVICE(s->cpu), ARM_CPU_IRQ)); in omap2420_mpu_init()
2318 qdev_get_gpio_in(DEVICE(s->cpu), ARM_CPU_FIQ)); in omap2420_mpu_init()
2320 s->prcm = omap_prcm_init(omap_l4tao(s->l4, 3), in omap2420_mpu_init()
2321 qdev_get_gpio_in(s->ih[0], in omap2420_mpu_init()
2323 NULL, NULL, s); in omap2420_mpu_init()
2325 s->sysc = omap_sysctl_init(omap_l4tao(s->l4, 1), in omap2420_mpu_init()
2326 omap_findclk(s, "omapctrl_iclk"), s); in omap2420_mpu_init()
2329 dma_irqs[i] = qdev_get_gpio_in(s->ih[omap2_dma_irq_map[i].ih], in omap2420_mpu_init()
2332 s->dma = omap_dma4_init(0x48056000, dma_irqs, sysmem, s, 256, 32, in omap2420_mpu_init()
2333 omap_findclk(s, "sdma_iclk"), in omap2420_mpu_init()
2334 omap_findclk(s, "sdma_fclk")); in omap2420_mpu_init()
2335 s->port->addr_valid = omap2_validate_addr; in omap2420_mpu_init()
2338 soc_dma_port_add_mem(s->dma, memory_region_get_ram_ptr(sdram), in omap2420_mpu_init()
2340 soc_dma_port_add_mem(s->dma, memory_region_get_ram_ptr(&s->sram), in omap2420_mpu_init()
2341 OMAP2_SRAM_BASE, s->sram_size); in omap2420_mpu_init()
2343 s->uart[0] = omap2_uart_init(sysmem, omap_l4ta(s->l4, 19), in omap2420_mpu_init()
2344 qdev_get_gpio_in(s->ih[0], in omap2420_mpu_init()
2346 omap_findclk(s, "uart1_fclk"), in omap2420_mpu_init()
2347 omap_findclk(s, "uart1_iclk"), in omap2420_mpu_init()
2348 s->drq[OMAP24XX_DMA_UART1_TX], in omap2420_mpu_init()
2349 s->drq[OMAP24XX_DMA_UART1_RX], in omap2420_mpu_init()
2352 s->uart[1] = omap2_uart_init(sysmem, omap_l4ta(s->l4, 20), in omap2420_mpu_init()
2353 qdev_get_gpio_in(s->ih[0], in omap2420_mpu_init()
2355 omap_findclk(s, "uart2_fclk"), in omap2420_mpu_init()
2356 omap_findclk(s, "uart2_iclk"), in omap2420_mpu_init()
2357 s->drq[OMAP24XX_DMA_UART2_TX], in omap2420_mpu_init()
2358 s->drq[OMAP24XX_DMA_UART2_RX], in omap2420_mpu_init()
2361 s->uart[2] = omap2_uart_init(sysmem, omap_l4ta(s->l4, 21), in omap2420_mpu_init()
2362 qdev_get_gpio_in(s->ih[0], in omap2420_mpu_init()
2364 omap_findclk(s, "uart3_fclk"), in omap2420_mpu_init()
2365 omap_findclk(s, "uart3_iclk"), in omap2420_mpu_init()
2366 s->drq[OMAP24XX_DMA_UART3_TX], in omap2420_mpu_init()
2367 s->drq[OMAP24XX_DMA_UART3_RX], in omap2420_mpu_init()
2371 s->gptimer[0] = omap_gp_timer_init(omap_l4ta(s->l4, 7), in omap2420_mpu_init()
2372 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER1), in omap2420_mpu_init()
2373 omap_findclk(s, "wu_gpt1_clk"), in omap2420_mpu_init()
2374 omap_findclk(s, "wu_l4_iclk")); in omap2420_mpu_init()
2375 s->gptimer[1] = omap_gp_timer_init(omap_l4ta(s->l4, 8), in omap2420_mpu_init()
2376 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER2), in omap2420_mpu_init()
2377 omap_findclk(s, "core_gpt2_clk"), in omap2420_mpu_init()
2378 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2379 s->gptimer[2] = omap_gp_timer_init(omap_l4ta(s->l4, 22), in omap2420_mpu_init()
2380 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER3), in omap2420_mpu_init()
2381 omap_findclk(s, "core_gpt3_clk"), in omap2420_mpu_init()
2382 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2383 s->gptimer[3] = omap_gp_timer_init(omap_l4ta(s->l4, 23), in omap2420_mpu_init()
2384 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER4), in omap2420_mpu_init()
2385 omap_findclk(s, "core_gpt4_clk"), in omap2420_mpu_init()
2386 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2387 s->gptimer[4] = omap_gp_timer_init(omap_l4ta(s->l4, 24), in omap2420_mpu_init()
2388 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER5), in omap2420_mpu_init()
2389 omap_findclk(s, "core_gpt5_clk"), in omap2420_mpu_init()
2390 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2391 s->gptimer[5] = omap_gp_timer_init(omap_l4ta(s->l4, 25), in omap2420_mpu_init()
2392 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER6), in omap2420_mpu_init()
2393 omap_findclk(s, "core_gpt6_clk"), in omap2420_mpu_init()
2394 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2395 s->gptimer[6] = omap_gp_timer_init(omap_l4ta(s->l4, 26), in omap2420_mpu_init()
2396 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER7), in omap2420_mpu_init()
2397 omap_findclk(s, "core_gpt7_clk"), in omap2420_mpu_init()
2398 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2399 s->gptimer[7] = omap_gp_timer_init(omap_l4ta(s->l4, 27), in omap2420_mpu_init()
2400 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER8), in omap2420_mpu_init()
2401 omap_findclk(s, "core_gpt8_clk"), in omap2420_mpu_init()
2402 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2403 s->gptimer[8] = omap_gp_timer_init(omap_l4ta(s->l4, 28), in omap2420_mpu_init()
2404 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER9), in omap2420_mpu_init()
2405 omap_findclk(s, "core_gpt9_clk"), in omap2420_mpu_init()
2406 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2407 s->gptimer[9] = omap_gp_timer_init(omap_l4ta(s->l4, 29), in omap2420_mpu_init()
2408 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER10), in omap2420_mpu_init()
2409 omap_findclk(s, "core_gpt10_clk"), in omap2420_mpu_init()
2410 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2411 s->gptimer[10] = omap_gp_timer_init(omap_l4ta(s->l4, 30), in omap2420_mpu_init()
2412 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER11), in omap2420_mpu_init()
2413 omap_findclk(s, "core_gpt11_clk"), in omap2420_mpu_init()
2414 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2415 s->gptimer[11] = omap_gp_timer_init(omap_l4ta(s->l4, 31), in omap2420_mpu_init()
2416 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER12), in omap2420_mpu_init()
2417 omap_findclk(s, "core_gpt12_clk"), in omap2420_mpu_init()
2418 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2420 omap_tap_init(omap_l4ta(s->l4, 2), s); in omap2420_mpu_init()
2422 s->synctimer = omap_synctimer_init(omap_l4tao(s->l4, 2), s, in omap2420_mpu_init()
2423 omap_findclk(s, "clk32-kHz"), in omap2420_mpu_init()
2424 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2426 s->i2c[0] = qdev_new("omap_i2c"); in omap2420_mpu_init()
2427 qdev_prop_set_uint8(s->i2c[0], "revision", 0x34); in omap2420_mpu_init()
2428 omap_i2c_set_iclk(OMAP_I2C(s->i2c[0]), omap_findclk(s, "i2c1.iclk")); in omap2420_mpu_init()
2429 omap_i2c_set_fclk(OMAP_I2C(s->i2c[0]), omap_findclk(s, "i2c1.fclk")); in omap2420_mpu_init()
2430 busdev = SYS_BUS_DEVICE(s->i2c[0]); in omap2420_mpu_init()
2433 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_I2C1_IRQ)); in omap2420_mpu_init()
2434 sysbus_connect_irq(busdev, 1, s->drq[OMAP24XX_DMA_I2C1_TX]); in omap2420_mpu_init()
2435 sysbus_connect_irq(busdev, 2, s->drq[OMAP24XX_DMA_I2C1_RX]); in omap2420_mpu_init()
2436 sysbus_mmio_map(busdev, 0, omap_l4_region_base(omap_l4tao(s->l4, 5), 0)); in omap2420_mpu_init()
2438 s->i2c[1] = qdev_new("omap_i2c"); in omap2420_mpu_init()
2439 qdev_prop_set_uint8(s->i2c[1], "revision", 0x34); in omap2420_mpu_init()
2440 omap_i2c_set_iclk(OMAP_I2C(s->i2c[1]), omap_findclk(s, "i2c2.iclk")); in omap2420_mpu_init()
2441 omap_i2c_set_fclk(OMAP_I2C(s->i2c[1]), omap_findclk(s, "i2c2.fclk")); in omap2420_mpu_init()
2442 busdev = SYS_BUS_DEVICE(s->i2c[1]); in omap2420_mpu_init()
2445 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_I2C2_IRQ)); in omap2420_mpu_init()
2446 sysbus_connect_irq(busdev, 1, s->drq[OMAP24XX_DMA_I2C2_TX]); in omap2420_mpu_init()
2447 sysbus_connect_irq(busdev, 2, s->drq[OMAP24XX_DMA_I2C2_RX]); in omap2420_mpu_init()
2448 sysbus_mmio_map(busdev, 0, omap_l4_region_base(omap_l4tao(s->l4, 6), 0)); in omap2420_mpu_init()
2450 s->gpio = qdev_new("omap2-gpio"); in omap2420_mpu_init()
2451 qdev_prop_set_int32(s->gpio, "mpu_model", s->mpu_model); in omap2420_mpu_init()
2452 omap2_gpio_set_iclk(OMAP2_GPIO(s->gpio), omap_findclk(s, "gpio_iclk")); in omap2420_mpu_init()
2453 omap2_gpio_set_fclk(OMAP2_GPIO(s->gpio), 0, omap_findclk(s, "gpio1_dbclk")); in omap2420_mpu_init()
2454 omap2_gpio_set_fclk(OMAP2_GPIO(s->gpio), 1, omap_findclk(s, "gpio2_dbclk")); in omap2420_mpu_init()
2455 omap2_gpio_set_fclk(OMAP2_GPIO(s->gpio), 2, omap_findclk(s, "gpio3_dbclk")); in omap2420_mpu_init()
2456 omap2_gpio_set_fclk(OMAP2_GPIO(s->gpio), 3, omap_findclk(s, "gpio4_dbclk")); in omap2420_mpu_init()
2457 if (s->mpu_model == omap2430) { in omap2420_mpu_init()
2458 omap2_gpio_set_fclk(OMAP2_GPIO(s->gpio), 4, in omap2420_mpu_init()
2459 omap_findclk(s, "gpio5_dbclk")); in omap2420_mpu_init()
2461 busdev = SYS_BUS_DEVICE(s->gpio); in omap2420_mpu_init()
2464 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK1)); in omap2420_mpu_init()
2466 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK2)); in omap2420_mpu_init()
2468 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK3)); in omap2420_mpu_init()
2470 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK4)); in omap2420_mpu_init()
2471 if (s->mpu_model == omap2430) { in omap2420_mpu_init()
2473 qdev_get_gpio_in(s->ih[0], in omap2420_mpu_init()
2476 ta = omap_l4ta(s->l4, 3); in omap2420_mpu_init()
2483 s->sdrc = omap_sdrc_init(sysmem, 0x68009000); in omap2420_mpu_init()
2484 s->gpmc = omap_gpmc_init(s, 0x6800a000, in omap2420_mpu_init()
2485 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPMC_IRQ), in omap2420_mpu_init()
2486 s->drq[OMAP24XX_DMA_GPMC]); in omap2420_mpu_init()
2492 s->mmc = omap2_mmc_init(omap_l4tao(s->l4, 9), in omap2420_mpu_init()
2494 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MMC_IRQ), in omap2420_mpu_init()
2495 &s->drq[OMAP24XX_DMA_MMC1_TX], in omap2420_mpu_init()
2496 omap_findclk(s, "mmc_fclk"), omap_findclk(s, "mmc_iclk")); in omap2420_mpu_init()
2498 s->mcspi[0] = omap_mcspi_init(omap_l4ta(s->l4, 35), 4, in omap2420_mpu_init()
2499 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MCSPI1_IRQ), in omap2420_mpu_init()
2500 &s->drq[OMAP24XX_DMA_SPI1_TX0], in omap2420_mpu_init()
2501 omap_findclk(s, "spi1_fclk"), in omap2420_mpu_init()
2502 omap_findclk(s, "spi1_iclk")); in omap2420_mpu_init()
2503 s->mcspi[1] = omap_mcspi_init(omap_l4ta(s->l4, 36), 2, in omap2420_mpu_init()
2504 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MCSPI2_IRQ), in omap2420_mpu_init()
2505 &s->drq[OMAP24XX_DMA_SPI2_TX0], in omap2420_mpu_init()
2506 omap_findclk(s, "spi2_fclk"), in omap2420_mpu_init()
2507 omap_findclk(s, "spi2_iclk")); in omap2420_mpu_init()
2509 s->dss = omap_dss_init(omap_l4ta(s->l4, 10), sysmem, 0x68000800, in omap2420_mpu_init()
2511 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_DSS_IRQ), in omap2420_mpu_init()
2512 s->drq[OMAP24XX_DMA_DSS], in omap2420_mpu_init()
2513 omap_findclk(s, "dss_clk1"), omap_findclk(s, "dss_clk2"), in omap2420_mpu_init()
2514 omap_findclk(s, "dss_54m_clk"), in omap2420_mpu_init()
2515 omap_findclk(s, "dss_l3_iclk"), in omap2420_mpu_init()
2516 omap_findclk(s, "dss_l4_iclk")); in omap2420_mpu_init()
2518 omap_sti_init(omap_l4ta(s->l4, 18), sysmem, 0x54000000, in omap2420_mpu_init()
2519 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_STI), in omap2420_mpu_init()
2520 omap_findclk(s, "emul_ck"), in omap2420_mpu_init()
2524 s->eac = omap_eac_init(omap_l4ta(s->l4, 32), in omap2420_mpu_init()
2525 qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_EAC_IRQ), in omap2420_mpu_init()
2527 &s->drq[OMAP24XX_DMA_EAC_AC_RD], in omap2420_mpu_init()
2528 omap_findclk(s, "func_96m_clk"), in omap2420_mpu_init()
2529 omap_findclk(s, "core_l4_iclk")); in omap2420_mpu_init()
2712 qemu_register_reset(omap2_mpu_reset, s); in omap2420_mpu_init()
2714 return s; in omap2420_mpu_init()