~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to hw/arm/stm32f205_soc.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
    STM32F205State *s = STM32F205_SOC(obj);
50
50
    int i;
51
51
 
 
52
    object_initialize(&s->armv7m, sizeof(s->armv7m), TYPE_ARMV7M);
 
53
    qdev_set_parent_bus(DEVICE(&s->armv7m), sysbus_get_default());
 
54
 
52
55
    object_initialize(&s->syscfg, sizeof(s->syscfg), TYPE_STM32F2XX_SYSCFG);
53
56
    qdev_set_parent_bus(DEVICE(&s->syscfg), sysbus_get_default());
54
57
 
82
85
static void stm32f205_soc_realize(DeviceState *dev_soc, Error **errp)
83
86
{
84
87
    STM32F205State *s = STM32F205_SOC(dev_soc);
85
 
    DeviceState *dev, *nvic;
 
88
    DeviceState *dev, *armv7m;
86
89
    SysBusDevice *busdev;
87
90
    Error *err = NULL;
88
91
    int i;
110
113
    vmstate_register_ram_global(sram);
111
114
    memory_region_add_subregion(system_memory, SRAM_BASE_ADDRESS, sram);
112
115
 
113
 
    nvic = armv7m_init(get_system_memory(), FLASH_SIZE, 96,
114
 
                       s->kernel_filename, s->cpu_model);
 
116
    armv7m = DEVICE(&s->armv7m);
 
117
    qdev_prop_set_uint32(armv7m, "num-irq", 96);
 
118
    qdev_prop_set_string(armv7m, "cpu-model", s->cpu_model);
 
119
    object_property_set_link(OBJECT(&s->armv7m), OBJECT(get_system_memory()),
 
120
                                     "memory", &error_abort);
 
121
    object_property_set_bool(OBJECT(&s->armv7m), true, "realized", &err);
 
122
    if (err != NULL) {
 
123
        error_propagate(errp, err);
 
124
        return;
 
125
    }
115
126
 
116
127
    /* System configuration controller */
117
128
    dev = DEVICE(&s->syscfg);
122
133
    }
123
134
    busdev = SYS_BUS_DEVICE(dev);
124
135
    sysbus_mmio_map(busdev, 0, 0x40013800);
125
 
    sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(nvic, 71));
 
136
    sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, 71));
126
137
 
127
138
    /* Attach UART (uses USART registers) and USART controllers */
128
139
    for (i = 0; i < STM_NUM_USARTS; i++) {
136
147
        }
137
148
        busdev = SYS_BUS_DEVICE(dev);
138
149
        sysbus_mmio_map(busdev, 0, usart_addr[i]);
139
 
        sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(nvic, usart_irq[i]));
 
150
        sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, usart_irq[i]));
140
151
    }
141
152
 
142
153
    /* Timer 2 to 5 */
150
161
        }
151
162
        busdev = SYS_BUS_DEVICE(dev);
152
163
        sysbus_mmio_map(busdev, 0, timer_addr[i]);
153
 
        sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(nvic, timer_irq[i]));
 
164
        sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, timer_irq[i]));
154
165
    }
155
166
 
156
167
    /* ADC 1 to 3 */
162
173
        return;
163
174
    }
164
175
    qdev_connect_gpio_out(DEVICE(s->adc_irqs), 0,
165
 
                          qdev_get_gpio_in(nvic, ADC_IRQ));
 
176
                          qdev_get_gpio_in(armv7m, ADC_IRQ));
166
177
 
167
178
    for (i = 0; i < STM_NUM_ADCS; i++) {
168
179
        dev = DEVICE(&(s->adc[i]));
187
198
        }
188
199
        busdev = SYS_BUS_DEVICE(dev);
189
200
        sysbus_mmio_map(busdev, 0, spi_addr[i]);
190
 
        sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(nvic, spi_irq[i]));
 
201
        sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, spi_irq[i]));
191
202
    }
192
203
}
193
204
 
194
205
static Property stm32f205_soc_properties[] = {
195
 
    DEFINE_PROP_STRING("kernel-filename", STM32F205State, kernel_filename),
196
206
    DEFINE_PROP_STRING("cpu-model", STM32F205State, cpu_model),
197
207
    DEFINE_PROP_END_OF_LIST(),
198
208
};