hw/arm/nrf51_soc: Connect UART to nRF51 SoC
Wire up nRF51 UART in the corresponding SoC. Signed-off-by: Julia Suvorova <jusual@mail.ru> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									19790847e2
								
							
						
					
					
						commit
						b0014913f2
					
				| @ -12,6 +12,7 @@ | ||||
| #include "qapi/error.h" | ||||
| #include "hw/boards.h" | ||||
| #include "hw/arm/arm.h" | ||||
| #include "sysemu/sysemu.h" | ||||
| #include "exec/address-spaces.h" | ||||
| 
 | ||||
| #include "hw/arm/nrf51_soc.h" | ||||
| @ -35,6 +36,7 @@ static void microbit_init(MachineState *machine) | ||||
| 
 | ||||
|     sysbus_init_child_obj(OBJECT(machine), "nrf51", soc, sizeof(s->nrf51), | ||||
|                           TYPE_NRF51_SOC); | ||||
|     qdev_prop_set_chr(DEVICE(&s->nrf51), "serial0", serial_hd(0)); | ||||
|     object_property_set_link(soc, OBJECT(system_memory), "memory", | ||||
|                              &error_fatal); | ||||
|     object_property_set_bool(soc, true, "realized", &error_fatal); | ||||
|  | ||||
| @ -43,9 +43,12 @@ | ||||
| #define NRF51822_FLASH_SIZE     (256 * 1024) | ||||
| #define NRF51822_SRAM_SIZE      (16 * 1024) | ||||
| 
 | ||||
| #define BASE_TO_IRQ(base) ((base >> 12) & 0x1F) | ||||
| 
 | ||||
| static void nrf51_soc_realize(DeviceState *dev_soc, Error **errp) | ||||
| { | ||||
|     NRF51State *s = NRF51_SOC(dev_soc); | ||||
|     MemoryRegion *mr; | ||||
|     Error *err = NULL; | ||||
| 
 | ||||
|     if (!s->board_memory) { | ||||
| @ -82,6 +85,18 @@ static void nrf51_soc_realize(DeviceState *dev_soc, Error **errp) | ||||
|     } | ||||
|     memory_region_add_subregion(&s->container, SRAM_BASE, &s->sram); | ||||
| 
 | ||||
|     /* UART */ | ||||
|     object_property_set_bool(OBJECT(&s->uart), true, "realized", &err); | ||||
|     if (err) { | ||||
|         error_propagate(errp, err); | ||||
|         return; | ||||
|     } | ||||
|     mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->uart), 0); | ||||
|     memory_region_add_subregion_overlap(&s->container, UART_BASE, mr, 0); | ||||
|     sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart), 0, | ||||
|                        qdev_get_gpio_in(DEVICE(&s->cpu), | ||||
|                        BASE_TO_IRQ(UART_BASE))); | ||||
| 
 | ||||
|     create_unimplemented_device("nrf51_soc.io", IOMEM_BASE, IOMEM_SIZE); | ||||
|     create_unimplemented_device("nrf51_soc.ficr", FICR_BASE, FICR_SIZE); | ||||
|     create_unimplemented_device("nrf51_soc.private", | ||||
| @ -99,6 +114,11 @@ static void nrf51_soc_init(Object *obj) | ||||
|     qdev_prop_set_string(DEVICE(&s->cpu), "cpu-type", | ||||
|                          ARM_CPU_TYPE_NAME("cortex-m0")); | ||||
|     qdev_prop_set_uint32(DEVICE(&s->cpu), "num-irq", 32); | ||||
| 
 | ||||
|     sysbus_init_child_obj(obj, "uart", &s->uart, sizeof(s->uart), | ||||
|                            TYPE_NRF51_UART); | ||||
|     object_property_add_alias(obj, "serial0", OBJECT(&s->uart), "chardev", | ||||
|                               &error_abort); | ||||
| } | ||||
| 
 | ||||
| static Property nrf51_soc_properties[] = { | ||||
|  | ||||
| @ -12,6 +12,7 @@ | ||||
| 
 | ||||
| #include "hw/sysbus.h" | ||||
| #include "hw/arm/armv7m.h" | ||||
| #include "hw/char/nrf51_uart.h" | ||||
| 
 | ||||
| #define TYPE_NRF51_SOC "nrf51-soc" | ||||
| #define NRF51_SOC(obj) \ | ||||
| @ -24,6 +25,8 @@ typedef struct NRF51State { | ||||
|     /*< public >*/ | ||||
|     ARMv7MState cpu; | ||||
| 
 | ||||
|     NRF51UARTState uart; | ||||
| 
 | ||||
|     MemoryRegion iomem; | ||||
|     MemoryRegion sram; | ||||
|     MemoryRegion flash; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Julia Suvorova
						Julia Suvorova