aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Vesely <jano.vesely@gmail.com>2012-04-03 17:50:52 -0400
committerPeter Maydell <peter.maydell@linaro.org>2012-04-05 15:41:41 +0000
commit638d057783f10fb492a66fcb9766cc2e8599b5a1 (patch)
tree576085801a6a9a4f8609304be32ba654f417f819
parent454dfc4a245e2a1072be84f896b16e935bea3326 (diff)
omap_uart: Add revision property.
Set revision to values reported by beagleboard(-xm) hw. Signed-off-by: Jan Vesely <jano.vesely@gmail.com>
-rw-r--r--hw/omap3.c6
-rw-r--r--hw/omap_uart.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/hw/omap3.c b/hw/omap3.c
index b90b94003..7cd7c95f9 100644
--- a/hw/omap3.c
+++ b/hw/omap3.c
@@ -4061,6 +4061,8 @@ struct omap_mpu_state_s *omap3_mpu_init(MemoryRegion *sysmem,
qemu_irq drqs[4];
int i;
SysBusDevice *busdev;
+ /* values reported by beagleboard(-xm) hw */
+ const unsigned uart_revision = model == omap3430 ? 0x46 : 0x52;
if (model != omap3430 && model != omap3630) {
hw_error("%s: invalid cpu model (%d)", __FUNCTION__, model);
@@ -4203,6 +4205,7 @@ struct omap_mpu_state_s *omap3_mpu_init(MemoryRegion *sysmem,
omap_clk_getrate(omap_findclk(s, "omap3_uart1_fclk"))
/ 16);
qdev_prop_set_chr(s->uart[0], "chardev", chr_uart1);
+ qdev_prop_set_uint32(s->uart[0], "revision", uart_revision);
qdev_init_nofail(s->uart[0]);
busdev = sysbus_from_qdev(s->uart[0]);
sysbus_connect_irq(busdev, 0,
@@ -4219,6 +4222,7 @@ struct omap_mpu_state_s *omap3_mpu_init(MemoryRegion *sysmem,
omap_clk_getrate(omap_findclk(s, "omap3_uart2_fclk"))
/ 16);
qdev_prop_set_chr(s->uart[1], "chardev", chr_uart2);
+ qdev_prop_set_uint32(s->uart[1], "revision", uart_revision);
qdev_init_nofail(s->uart[1]);
busdev = sysbus_from_qdev(s->uart[1]);
sysbus_connect_irq(busdev, 0,
@@ -4235,6 +4239,7 @@ struct omap_mpu_state_s *omap3_mpu_init(MemoryRegion *sysmem,
omap_clk_getrate(omap_findclk(s, "omap3_uart3_fclk"))
/ 16);
qdev_prop_set_chr(s->uart[2], "chardev", chr_uart3);
+ qdev_prop_set_uint32(s->uart[2], "revision", uart_revision);
qdev_init_nofail(s->uart[2]);
busdev = sysbus_from_qdev(s->uart[2]);
sysbus_connect_irq(busdev, 0,
@@ -4253,6 +4258,7 @@ struct omap_mpu_state_s *omap3_mpu_init(MemoryRegion *sysmem,
"omap3_uart4_fclk"))
/ 16);
qdev_prop_set_chr(s->uart[3], "chardev", chr_uart4);
+ qdev_prop_set_uint32(s->uart[3], "revision", uart_revision);
qdev_init_nofail(s->uart[3]);
busdev = sysbus_from_qdev(s->uart[3]);
sysbus_connect_irq(busdev, 0,
diff --git a/hw/omap_uart.c b/hw/omap_uart.c
index cd568b043..644fa04e9 100644
--- a/hw/omap_uart.c
+++ b/hw/omap_uart.c
@@ -46,6 +46,7 @@ struct omap_uart_s {
const MemoryRegionOps *serial_ops;
uint32_t mmio_size;
uint32_t baudrate;
+ uint32_t revision;
qemu_irq tx_drq;
qemu_irq rx_drq;
@@ -165,7 +166,7 @@ static uint64_t omap_uart_read(void *opaque, target_phys_addr_t addr,
case 0x4C: /* OSC_12M_SEL (OMAP1) */
return s->clksel;
case 0x50: /* MVR */
- return 0x30;
+ return s->revision;
case 0x54: /* SYSC (OMAP2) */
return s->syscontrol;
case 0x58: /* SYSS (OMAP2) */
@@ -326,6 +327,7 @@ static int omap_uart_init(SysBusDevice *busdev)
}
static Property omap_uart_properties[] = {
+ DEFINE_PROP_UINT32("revision", struct omap_uart_s, revision, 0x30),
DEFINE_PROP_UINT32("mmio_size", struct omap_uart_s, mmio_size, 0x400),
DEFINE_PROP_UINT32("baudrate", struct omap_uart_s, baudrate, 0),
DEFINE_PROP_CHR("chardev", struct omap_uart_s, chr),