armsse.c (287f43196d1008b1f85d7a33593789381dde2d4b) armsse.c (db873cc5d1a4aaa67eea87768d504b2f89d88738)
1/*
2 * Arm SSE (Subsystems for Embedded): IoTKit
3 *
4 * Copyright (c) 2018 Linaro Limited
5 * Written by Peter Maydell
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 or

--- 259 unchanged lines hidden (view full) ---

268 if (i > 0) {
269 name = g_strdup_printf("arm-sse-container-alias%d", i);
270 memory_region_init_alias(&s->container_alias[i - 1], obj,
271 name, &s->container, 0, UINT64_MAX);
272 g_free(name);
273 }
274 }
275
1/*
2 * Arm SSE (Subsystems for Embedded): IoTKit
3 *
4 * Copyright (c) 2018 Linaro Limited
5 * Written by Peter Maydell
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 or

--- 259 unchanged lines hidden (view full) ---

268 if (i > 0) {
269 name = g_strdup_printf("arm-sse-container-alias%d", i);
270 memory_region_init_alias(&s->container_alias[i - 1], obj,
271 name, &s->container, 0, UINT64_MAX);
272 g_free(name);
273 }
274 }
275
276 sysbus_init_child_obj(obj, "secctl", &s->secctl, sizeof(s->secctl),
277 TYPE_IOTKIT_SECCTL);
278 sysbus_init_child_obj(obj, "apb-ppc0", &s->apb_ppc0, sizeof(s->apb_ppc0),
279 TYPE_TZ_PPC);
280 sysbus_init_child_obj(obj, "apb-ppc1", &s->apb_ppc1, sizeof(s->apb_ppc1),
281 TYPE_TZ_PPC);
276 object_initialize_child(obj, "secctl", &s->secctl, TYPE_IOTKIT_SECCTL);
277 object_initialize_child(obj, "apb-ppc0", &s->apb_ppc0, TYPE_TZ_PPC);
278 object_initialize_child(obj, "apb-ppc1", &s->apb_ppc1, TYPE_TZ_PPC);
282 for (i = 0; i < info->sram_banks; i++) {
283 char *name = g_strdup_printf("mpc%d", i);
279 for (i = 0; i < info->sram_banks; i++) {
280 char *name = g_strdup_printf("mpc%d", i);
284 sysbus_init_child_obj(obj, name, &s->mpc[i],
285 sizeof(s->mpc[i]), TYPE_TZ_MPC);
281 object_initialize_child(obj, name, &s->mpc[i], TYPE_TZ_MPC);
286 g_free(name);
287 }
288 object_initialize_child(obj, "mpc-irq-orgate", &s->mpc_irq_orgate,
289 TYPE_OR_IRQ);
290
291 for (i = 0; i < IOTS_NUM_EXP_MPC + info->sram_banks; i++) {
292 char *name = g_strdup_printf("mpc-irq-splitter-%d", i);
293 SplitIRQ *splitter = &s->mpc_irq_splitter[i];
294
295 object_initialize_child(obj, name, splitter, TYPE_SPLIT_IRQ);
296 g_free(name);
297 }
282 g_free(name);
283 }
284 object_initialize_child(obj, "mpc-irq-orgate", &s->mpc_irq_orgate,
285 TYPE_OR_IRQ);
286
287 for (i = 0; i < IOTS_NUM_EXP_MPC + info->sram_banks; i++) {
288 char *name = g_strdup_printf("mpc-irq-splitter-%d", i);
289 SplitIRQ *splitter = &s->mpc_irq_splitter[i];
290
291 object_initialize_child(obj, name, splitter, TYPE_SPLIT_IRQ);
292 g_free(name);
293 }
298 sysbus_init_child_obj(obj, "timer0", &s->timer0, sizeof(s->timer0),
299 TYPE_CMSDK_APB_TIMER);
300 sysbus_init_child_obj(obj, "timer1", &s->timer1, sizeof(s->timer1),
301 TYPE_CMSDK_APB_TIMER);
302 sysbus_init_child_obj(obj, "s32ktimer", &s->s32ktimer, sizeof(s->s32ktimer),
303 TYPE_CMSDK_APB_TIMER);
304 sysbus_init_child_obj(obj, "dualtimer", &s->dualtimer, sizeof(s->dualtimer),
305 TYPE_CMSDK_APB_DUALTIMER);
306 sysbus_init_child_obj(obj, "s32kwatchdog", &s->s32kwatchdog,
307 sizeof(s->s32kwatchdog), TYPE_CMSDK_APB_WATCHDOG);
308 sysbus_init_child_obj(obj, "nswatchdog", &s->nswatchdog,
309 sizeof(s->nswatchdog), TYPE_CMSDK_APB_WATCHDOG);
310 sysbus_init_child_obj(obj, "swatchdog", &s->swatchdog,
311 sizeof(s->swatchdog), TYPE_CMSDK_APB_WATCHDOG);
312 sysbus_init_child_obj(obj, "armsse-sysctl", &s->sysctl,
313 sizeof(s->sysctl), TYPE_IOTKIT_SYSCTL);
314 sysbus_init_child_obj(obj, "armsse-sysinfo", &s->sysinfo,
315 sizeof(s->sysinfo), TYPE_IOTKIT_SYSINFO);
294 object_initialize_child(obj, "timer0", &s->timer0, TYPE_CMSDK_APB_TIMER);
295 object_initialize_child(obj, "timer1", &s->timer1, TYPE_CMSDK_APB_TIMER);
296 object_initialize_child(obj, "s32ktimer", &s->s32ktimer,
297 TYPE_CMSDK_APB_TIMER);
298 object_initialize_child(obj, "dualtimer", &s->dualtimer,
299 TYPE_CMSDK_APB_DUALTIMER);
300 object_initialize_child(obj, "s32kwatchdog", &s->s32kwatchdog,
301 TYPE_CMSDK_APB_WATCHDOG);
302 object_initialize_child(obj, "nswatchdog", &s->nswatchdog,
303 TYPE_CMSDK_APB_WATCHDOG);
304 object_initialize_child(obj, "swatchdog", &s->swatchdog,
305 TYPE_CMSDK_APB_WATCHDOG);
306 object_initialize_child(obj, "armsse-sysctl", &s->sysctl,
307 TYPE_IOTKIT_SYSCTL);
308 object_initialize_child(obj, "armsse-sysinfo", &s->sysinfo,
309 TYPE_IOTKIT_SYSINFO);
316 if (info->has_mhus) {
317 sysbus_init_child_obj(obj, "mhu0", &s->mhu[0], sizeof(s->mhu[0]),
318 TYPE_ARMSSE_MHU);
319 sysbus_init_child_obj(obj, "mhu1", &s->mhu[1], sizeof(s->mhu[1]),
320 TYPE_ARMSSE_MHU);
321 }
322 if (info->has_ppus) {
323 for (i = 0; i < info->num_cpus; i++) {

--- 17 unchanged lines hidden (view full) ---

341 TYPE_UNIMPLEMENTED_DEVICE);
342 g_free(name);
343 }
344 }
345 if (info->has_cachectrl) {
346 for (i = 0; i < info->num_cpus; i++) {
347 char *name = g_strdup_printf("cachectrl%d", i);
348
310 if (info->has_mhus) {
311 sysbus_init_child_obj(obj, "mhu0", &s->mhu[0], sizeof(s->mhu[0]),
312 TYPE_ARMSSE_MHU);
313 sysbus_init_child_obj(obj, "mhu1", &s->mhu[1], sizeof(s->mhu[1]),
314 TYPE_ARMSSE_MHU);
315 }
316 if (info->has_ppus) {
317 for (i = 0; i < info->num_cpus; i++) {

--- 17 unchanged lines hidden (view full) ---

335 TYPE_UNIMPLEMENTED_DEVICE);
336 g_free(name);
337 }
338 }
339 if (info->has_cachectrl) {
340 for (i = 0; i < info->num_cpus; i++) {
341 char *name = g_strdup_printf("cachectrl%d", i);
342
349 sysbus_init_child_obj(obj, name, &s->cachectrl[i],
350 sizeof(s->cachectrl[i]),
351 TYPE_UNIMPLEMENTED_DEVICE);
343 object_initialize_child(obj, name, &s->cachectrl[i],
344 TYPE_UNIMPLEMENTED_DEVICE);
352 g_free(name);
353 }
354 }
355 if (info->has_cpusecctrl) {
356 for (i = 0; i < info->num_cpus; i++) {
357 char *name = g_strdup_printf("cpusecctrl%d", i);
358
345 g_free(name);
346 }
347 }
348 if (info->has_cpusecctrl) {
349 for (i = 0; i < info->num_cpus; i++) {
350 char *name = g_strdup_printf("cpusecctrl%d", i);
351
359 sysbus_init_child_obj(obj, name, &s->cpusecctrl[i],
360 sizeof(s->cpusecctrl[i]),
361 TYPE_UNIMPLEMENTED_DEVICE);
352 object_initialize_child(obj, name, &s->cpusecctrl[i],
353 TYPE_UNIMPLEMENTED_DEVICE);
362 g_free(name);
363 }
364 }
365 if (info->has_cpuid) {
366 for (i = 0; i < info->num_cpus; i++) {
367 char *name = g_strdup_printf("cpuid%d", i);
368
354 g_free(name);
355 }
356 }
357 if (info->has_cpuid) {
358 for (i = 0; i < info->num_cpus; i++) {
359 char *name = g_strdup_printf("cpuid%d", i);
360
369 sysbus_init_child_obj(obj, name, &s->cpuid[i],
370 sizeof(s->cpuid[i]),
371 TYPE_ARMSSE_CPUID);
361 object_initialize_child(obj, name, &s->cpuid[i],
362 TYPE_ARMSSE_CPUID);
372 g_free(name);
373 }
374 }
375 object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, TYPE_OR_IRQ);
376 object_initialize_child(obj, "ppc-irq-orgate", &s->ppc_irq_orgate,
377 TYPE_OR_IRQ);
378 object_initialize_child(obj, "sec-resp-splitter", &s->sec_resp_splitter,
379 TYPE_SPLIT_IRQ);

--- 284 unchanged lines hidden (view full) ---

664 * are per-CPU, so we must put this alias in the per-cpu containers.
665 */
666 for (i = 0; i < info->num_cpus; i++) {
667 make_alias(s, &s->alias3[i], &s->cpu_container[i],
668 "alias 3", 0x50000000, 0x10000000, 0x40000000);
669 }
670
671 /* Security controller */
363 g_free(name);
364 }
365 }
366 object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, TYPE_OR_IRQ);
367 object_initialize_child(obj, "ppc-irq-orgate", &s->ppc_irq_orgate,
368 TYPE_OR_IRQ);
369 object_initialize_child(obj, "sec-resp-splitter", &s->sec_resp_splitter,
370 TYPE_SPLIT_IRQ);

--- 284 unchanged lines hidden (view full) ---

655 * are per-CPU, so we must put this alias in the per-cpu containers.
656 */
657 for (i = 0; i < info->num_cpus; i++) {
658 make_alias(s, &s->alias3[i], &s->cpu_container[i],
659 "alias 3", 0x50000000, 0x10000000, 0x40000000);
660 }
661
662 /* Security controller */
672 object_property_set_bool(OBJECT(&s->secctl), true, "realized", &err);
663 sysbus_realize(SYS_BUS_DEVICE(&s->secctl), &err);
673 if (err) {
674 error_propagate(errp, err);
675 return;
676 }
677 sbd_secctl = SYS_BUS_DEVICE(&s->secctl);
678 dev_secctl = DEVICE(&s->secctl);
679 sysbus_mmio_map(sbd_secctl, 0, 0x50080000);
680 sysbus_mmio_map(sbd_secctl, 1, 0x40080000);

--- 35 unchanged lines hidden (view full) ---

716 return;
717 }
718 object_property_set_link(OBJECT(&s->mpc[i]), OBJECT(&s->sram[i]),
719 "downstream", &err);
720 if (err) {
721 error_propagate(errp, err);
722 return;
723 }
664 if (err) {
665 error_propagate(errp, err);
666 return;
667 }
668 sbd_secctl = SYS_BUS_DEVICE(&s->secctl);
669 dev_secctl = DEVICE(&s->secctl);
670 sysbus_mmio_map(sbd_secctl, 0, 0x50080000);
671 sysbus_mmio_map(sbd_secctl, 1, 0x40080000);

--- 35 unchanged lines hidden (view full) ---

707 return;
708 }
709 object_property_set_link(OBJECT(&s->mpc[i]), OBJECT(&s->sram[i]),
710 "downstream", &err);
711 if (err) {
712 error_propagate(errp, err);
713 return;
714 }
724 object_property_set_bool(OBJECT(&s->mpc[i]), true, "realized", &err);
715 sysbus_realize(SYS_BUS_DEVICE(&s->mpc[i]), &err);
725 if (err) {
726 error_propagate(errp, err);
727 return;
728 }
729 /* Map the upstream end of the MPC into the right place... */
730 sbd_mpc = SYS_BUS_DEVICE(&s->mpc[i]);
731 memory_region_add_subregion(&s->container,
732 0x20000000 + i * sram_bank_size,

--- 26 unchanged lines hidden (view full) ---

759 * 0x40002000: dual timer
760 * 0x40003000: MHU0 (SSE-200 only)
761 * 0x40004000: MHU1 (SSE-200 only)
762 * We must configure and realize each downstream device and connect
763 * it to the appropriate PPC port; then we can realize the PPC and
764 * map its upstream ends to the right place in the container.
765 */
766 qdev_prop_set_uint32(DEVICE(&s->timer0), "pclk-frq", s->mainclk_frq);
716 if (err) {
717 error_propagate(errp, err);
718 return;
719 }
720 /* Map the upstream end of the MPC into the right place... */
721 sbd_mpc = SYS_BUS_DEVICE(&s->mpc[i]);
722 memory_region_add_subregion(&s->container,
723 0x20000000 + i * sram_bank_size,

--- 26 unchanged lines hidden (view full) ---

750 * 0x40002000: dual timer
751 * 0x40003000: MHU0 (SSE-200 only)
752 * 0x40004000: MHU1 (SSE-200 only)
753 * We must configure and realize each downstream device and connect
754 * it to the appropriate PPC port; then we can realize the PPC and
755 * map its upstream ends to the right place in the container.
756 */
757 qdev_prop_set_uint32(DEVICE(&s->timer0), "pclk-frq", s->mainclk_frq);
767 object_property_set_bool(OBJECT(&s->timer0), true, "realized", &err);
758 sysbus_realize(SYS_BUS_DEVICE(&s->timer0), &err);
768 if (err) {
769 error_propagate(errp, err);
770 return;
771 }
772 sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer0), 0,
773 armsse_get_common_irq_in(s, 3));
774 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->timer0), 0);
775 object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[0]", &err);
776 if (err) {
777 error_propagate(errp, err);
778 return;
779 }
780
781 qdev_prop_set_uint32(DEVICE(&s->timer1), "pclk-frq", s->mainclk_frq);
759 if (err) {
760 error_propagate(errp, err);
761 return;
762 }
763 sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer0), 0,
764 armsse_get_common_irq_in(s, 3));
765 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->timer0), 0);
766 object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[0]", &err);
767 if (err) {
768 error_propagate(errp, err);
769 return;
770 }
771
772 qdev_prop_set_uint32(DEVICE(&s->timer1), "pclk-frq", s->mainclk_frq);
782 object_property_set_bool(OBJECT(&s->timer1), true, "realized", &err);
773 sysbus_realize(SYS_BUS_DEVICE(&s->timer1), &err);
783 if (err) {
784 error_propagate(errp, err);
785 return;
786 }
787 sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer1), 0,
788 armsse_get_common_irq_in(s, 4));
789 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->timer1), 0);
790 object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[1]", &err);
791 if (err) {
792 error_propagate(errp, err);
793 return;
794 }
795
796
797 qdev_prop_set_uint32(DEVICE(&s->dualtimer), "pclk-frq", s->mainclk_frq);
774 if (err) {
775 error_propagate(errp, err);
776 return;
777 }
778 sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer1), 0,
779 armsse_get_common_irq_in(s, 4));
780 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->timer1), 0);
781 object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[1]", &err);
782 if (err) {
783 error_propagate(errp, err);
784 return;
785 }
786
787
788 qdev_prop_set_uint32(DEVICE(&s->dualtimer), "pclk-frq", s->mainclk_frq);
798 object_property_set_bool(OBJECT(&s->dualtimer), true, "realized", &err);
789 sysbus_realize(SYS_BUS_DEVICE(&s->dualtimer), &err);
799 if (err) {
800 error_propagate(errp, err);
801 return;
802 }
803 sysbus_connect_irq(SYS_BUS_DEVICE(&s->dualtimer), 0,
804 armsse_get_common_irq_in(s, 5));
805 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dualtimer), 0);
806 object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[2]", &err);

--- 44 unchanged lines hidden (view full) ---

851 DeviceState *cpudev = DEVICE(&s->armv7m[cpunum]);
852
853 sysbus_connect_irq(mhu_sbd, cpunum,
854 qdev_get_gpio_in(cpudev, 6 + i));
855 }
856 }
857 }
858
790 if (err) {
791 error_propagate(errp, err);
792 return;
793 }
794 sysbus_connect_irq(SYS_BUS_DEVICE(&s->dualtimer), 0,
795 armsse_get_common_irq_in(s, 5));
796 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dualtimer), 0);
797 object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[2]", &err);

--- 44 unchanged lines hidden (view full) ---

842 DeviceState *cpudev = DEVICE(&s->armv7m[cpunum]);
843
844 sysbus_connect_irq(mhu_sbd, cpunum,
845 qdev_get_gpio_in(cpudev, 6 + i));
846 }
847 }
848 }
849
859 object_property_set_bool(OBJECT(&s->apb_ppc0), true, "realized", &err);
850 sysbus_realize(SYS_BUS_DEVICE(&s->apb_ppc0), &err);
860 if (err) {
861 error_propagate(errp, err);
862 return;
863 }
864
865 sbd_apb_ppc0 = SYS_BUS_DEVICE(&s->apb_ppc0);
866 dev_apb_ppc0 = DEVICE(&s->apb_ppc0);
867

--- 56 unchanged lines hidden (view full) ---

924 if (info->has_cachectrl) {
925 for (i = 0; i < info->num_cpus; i++) {
926 char *name = g_strdup_printf("cachectrl%d", i);
927 MemoryRegion *mr;
928
929 qdev_prop_set_string(DEVICE(&s->cachectrl[i]), "name", name);
930 g_free(name);
931 qdev_prop_set_uint64(DEVICE(&s->cachectrl[i]), "size", 0x1000);
851 if (err) {
852 error_propagate(errp, err);
853 return;
854 }
855
856 sbd_apb_ppc0 = SYS_BUS_DEVICE(&s->apb_ppc0);
857 dev_apb_ppc0 = DEVICE(&s->apb_ppc0);
858

--- 56 unchanged lines hidden (view full) ---

915 if (info->has_cachectrl) {
916 for (i = 0; i < info->num_cpus; i++) {
917 char *name = g_strdup_printf("cachectrl%d", i);
918 MemoryRegion *mr;
919
920 qdev_prop_set_string(DEVICE(&s->cachectrl[i]), "name", name);
921 g_free(name);
922 qdev_prop_set_uint64(DEVICE(&s->cachectrl[i]), "size", 0x1000);
932 object_property_set_bool(OBJECT(&s->cachectrl[i]), true,
933 "realized", &err);
923 sysbus_realize(SYS_BUS_DEVICE(&s->cachectrl[i]), &err);
934 if (err) {
935 error_propagate(errp, err);
936 return;
937 }
938
939 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cachectrl[i]), 0);
940 memory_region_add_subregion(&s->cpu_container[i], 0x50010000, mr);
941 }
942 }
943 if (info->has_cpusecctrl) {
944 for (i = 0; i < info->num_cpus; i++) {
945 char *name = g_strdup_printf("CPUSECCTRL%d", i);
946 MemoryRegion *mr;
947
948 qdev_prop_set_string(DEVICE(&s->cpusecctrl[i]), "name", name);
949 g_free(name);
950 qdev_prop_set_uint64(DEVICE(&s->cpusecctrl[i]), "size", 0x1000);
924 if (err) {
925 error_propagate(errp, err);
926 return;
927 }
928
929 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cachectrl[i]), 0);
930 memory_region_add_subregion(&s->cpu_container[i], 0x50010000, mr);
931 }
932 }
933 if (info->has_cpusecctrl) {
934 for (i = 0; i < info->num_cpus; i++) {
935 char *name = g_strdup_printf("CPUSECCTRL%d", i);
936 MemoryRegion *mr;
937
938 qdev_prop_set_string(DEVICE(&s->cpusecctrl[i]), "name", name);
939 g_free(name);
940 qdev_prop_set_uint64(DEVICE(&s->cpusecctrl[i]), "size", 0x1000);
951 object_property_set_bool(OBJECT(&s->cpusecctrl[i]), true,
952 "realized", &err);
941 sysbus_realize(SYS_BUS_DEVICE(&s->cpusecctrl[i]), &err);
953 if (err) {
954 error_propagate(errp, err);
955 return;
956 }
957
958 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpusecctrl[i]), 0);
959 memory_region_add_subregion(&s->cpu_container[i], 0x50011000, mr);
960 }
961 }
962 if (info->has_cpuid) {
963 for (i = 0; i < info->num_cpus; i++) {
964 MemoryRegion *mr;
965
966 qdev_prop_set_uint32(DEVICE(&s->cpuid[i]), "CPUID", i);
942 if (err) {
943 error_propagate(errp, err);
944 return;
945 }
946
947 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpusecctrl[i]), 0);
948 memory_region_add_subregion(&s->cpu_container[i], 0x50011000, mr);
949 }
950 }
951 if (info->has_cpuid) {
952 for (i = 0; i < info->num_cpus; i++) {
953 MemoryRegion *mr;
954
955 qdev_prop_set_uint32(DEVICE(&s->cpuid[i]), "CPUID", i);
967 object_property_set_bool(OBJECT(&s->cpuid[i]), true,
968 "realized", &err);
956 sysbus_realize(SYS_BUS_DEVICE(&s->cpuid[i]), &err);
969 if (err) {
970 error_propagate(errp, err);
971 return;
972 }
973
974 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpuid[i]), 0);
975 memory_region_add_subregion(&s->cpu_container[i], 0x4001F000, mr);
976 }
977 }
978
979 /* 0x40020000 .. 0x4002ffff : ARMSSE system control peripheral region */
980 /* Devices behind APB PPC1:
981 * 0x4002f000: S32K timer
982 */
983 qdev_prop_set_uint32(DEVICE(&s->s32ktimer), "pclk-frq", S32KCLK);
957 if (err) {
958 error_propagate(errp, err);
959 return;
960 }
961
962 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpuid[i]), 0);
963 memory_region_add_subregion(&s->cpu_container[i], 0x4001F000, mr);
964 }
965 }
966
967 /* 0x40020000 .. 0x4002ffff : ARMSSE system control peripheral region */
968 /* Devices behind APB PPC1:
969 * 0x4002f000: S32K timer
970 */
971 qdev_prop_set_uint32(DEVICE(&s->s32ktimer), "pclk-frq", S32KCLK);
984 object_property_set_bool(OBJECT(&s->s32ktimer), true, "realized", &err);
972 sysbus_realize(SYS_BUS_DEVICE(&s->s32ktimer), &err);
985 if (err) {
986 error_propagate(errp, err);
987 return;
988 }
989 sysbus_connect_irq(SYS_BUS_DEVICE(&s->s32ktimer), 0,
990 armsse_get_common_irq_in(s, 2));
991 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->s32ktimer), 0);
992 object_property_set_link(OBJECT(&s->apb_ppc1), OBJECT(mr), "port[0]", &err);
993 if (err) {
994 error_propagate(errp, err);
995 return;
996 }
997
973 if (err) {
974 error_propagate(errp, err);
975 return;
976 }
977 sysbus_connect_irq(SYS_BUS_DEVICE(&s->s32ktimer), 0,
978 armsse_get_common_irq_in(s, 2));
979 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->s32ktimer), 0);
980 object_property_set_link(OBJECT(&s->apb_ppc1), OBJECT(mr), "port[0]", &err);
981 if (err) {
982 error_propagate(errp, err);
983 return;
984 }
985
998 object_property_set_bool(OBJECT(&s->apb_ppc1), true, "realized", &err);
986 sysbus_realize(SYS_BUS_DEVICE(&s->apb_ppc1), &err);
999 if (err) {
1000 error_propagate(errp, err);
1001 return;
1002 }
1003 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->apb_ppc1), 0);
1004 memory_region_add_subregion(&s->container, 0x4002f000, mr);
1005
1006 dev_apb_ppc1 = DEVICE(&s->apb_ppc1);

--- 21 unchanged lines hidden (view full) ---

1028 }
1029 object_property_set_int(OBJECT(&s->sysinfo),
1030 armsse_sys_config_value(s, info),
1031 "SYS_CONFIG", &err);
1032 if (err) {
1033 error_propagate(errp, err);
1034 return;
1035 }
987 if (err) {
988 error_propagate(errp, err);
989 return;
990 }
991 mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->apb_ppc1), 0);
992 memory_region_add_subregion(&s->container, 0x4002f000, mr);
993
994 dev_apb_ppc1 = DEVICE(&s->apb_ppc1);

--- 21 unchanged lines hidden (view full) ---

1016 }
1017 object_property_set_int(OBJECT(&s->sysinfo),
1018 armsse_sys_config_value(s, info),
1019 "SYS_CONFIG", &err);
1020 if (err) {
1021 error_propagate(errp, err);
1022 return;
1023 }
1036 object_property_set_bool(OBJECT(&s->sysinfo), true, "realized", &err);
1024 sysbus_realize(SYS_BUS_DEVICE(&s->sysinfo), &err);
1037 if (err) {
1038 error_propagate(errp, err);
1039 return;
1040 }
1041 /* System information registers */
1042 sysbus_mmio_map(SYS_BUS_DEVICE(&s->sysinfo), 0, 0x40020000);
1043 /* System control registers */
1044 object_property_set_int(OBJECT(&s->sysctl), info->sys_version,
1045 "SYS_VERSION", &err);
1046 object_property_set_int(OBJECT(&s->sysctl), info->cpuwait_rst,
1047 "CPUWAIT_RST", &err);
1048 object_property_set_int(OBJECT(&s->sysctl), s->init_svtor,
1049 "INITSVTOR0_RST", &err);
1050 object_property_set_int(OBJECT(&s->sysctl), s->init_svtor,
1051 "INITSVTOR1_RST", &err);
1025 if (err) {
1026 error_propagate(errp, err);
1027 return;
1028 }
1029 /* System information registers */
1030 sysbus_mmio_map(SYS_BUS_DEVICE(&s->sysinfo), 0, 0x40020000);
1031 /* System control registers */
1032 object_property_set_int(OBJECT(&s->sysctl), info->sys_version,
1033 "SYS_VERSION", &err);
1034 object_property_set_int(OBJECT(&s->sysctl), info->cpuwait_rst,
1035 "CPUWAIT_RST", &err);
1036 object_property_set_int(OBJECT(&s->sysctl), s->init_svtor,
1037 "INITSVTOR0_RST", &err);
1038 object_property_set_int(OBJECT(&s->sysctl), s->init_svtor,
1039 "INITSVTOR1_RST", &err);
1052 object_property_set_bool(OBJECT(&s->sysctl), true, "realized", &err);
1040 sysbus_realize(SYS_BUS_DEVICE(&s->sysctl), &err);
1053 if (err) {
1054 error_propagate(errp, err);
1055 return;
1056 }
1057 sysbus_mmio_map(SYS_BUS_DEVICE(&s->sysctl), 0, 0x50021000);
1058
1059 if (info->has_ppus) {
1060 /* CPUnCORE_PPU for each CPU */

--- 27 unchanged lines hidden (view full) ---

1088 if (err) {
1089 error_propagate(errp, err);
1090 return;
1091 }
1092 qdev_connect_gpio_out(DEVICE(&s->nmi_orgate), 0,
1093 qdev_get_gpio_in_named(DEVICE(&s->armv7m), "NMI", 0));
1094
1095 qdev_prop_set_uint32(DEVICE(&s->s32kwatchdog), "wdogclk-frq", S32KCLK);
1041 if (err) {
1042 error_propagate(errp, err);
1043 return;
1044 }
1045 sysbus_mmio_map(SYS_BUS_DEVICE(&s->sysctl), 0, 0x50021000);
1046
1047 if (info->has_ppus) {
1048 /* CPUnCORE_PPU for each CPU */

--- 27 unchanged lines hidden (view full) ---

1076 if (err) {
1077 error_propagate(errp, err);
1078 return;
1079 }
1080 qdev_connect_gpio_out(DEVICE(&s->nmi_orgate), 0,
1081 qdev_get_gpio_in_named(DEVICE(&s->armv7m), "NMI", 0));
1082
1083 qdev_prop_set_uint32(DEVICE(&s->s32kwatchdog), "wdogclk-frq", S32KCLK);
1096 object_property_set_bool(OBJECT(&s->s32kwatchdog), true, "realized", &err);
1084 sysbus_realize(SYS_BUS_DEVICE(&s->s32kwatchdog), &err);
1097 if (err) {
1098 error_propagate(errp, err);
1099 return;
1100 }
1101 sysbus_connect_irq(SYS_BUS_DEVICE(&s->s32kwatchdog), 0,
1102 qdev_get_gpio_in(DEVICE(&s->nmi_orgate), 0));
1103 sysbus_mmio_map(SYS_BUS_DEVICE(&s->s32kwatchdog), 0, 0x5002e000);
1104
1105 /* 0x40080000 .. 0x4008ffff : ARMSSE second Base peripheral region */
1106
1107 qdev_prop_set_uint32(DEVICE(&s->nswatchdog), "wdogclk-frq", s->mainclk_frq);
1085 if (err) {
1086 error_propagate(errp, err);
1087 return;
1088 }
1089 sysbus_connect_irq(SYS_BUS_DEVICE(&s->s32kwatchdog), 0,
1090 qdev_get_gpio_in(DEVICE(&s->nmi_orgate), 0));
1091 sysbus_mmio_map(SYS_BUS_DEVICE(&s->s32kwatchdog), 0, 0x5002e000);
1092
1093 /* 0x40080000 .. 0x4008ffff : ARMSSE second Base peripheral region */
1094
1095 qdev_prop_set_uint32(DEVICE(&s->nswatchdog), "wdogclk-frq", s->mainclk_frq);
1108 object_property_set_bool(OBJECT(&s->nswatchdog), true, "realized", &err);
1096 sysbus_realize(SYS_BUS_DEVICE(&s->nswatchdog), &err);
1109 if (err) {
1110 error_propagate(errp, err);
1111 return;
1112 }
1113 sysbus_connect_irq(SYS_BUS_DEVICE(&s->nswatchdog), 0,
1114 armsse_get_common_irq_in(s, 1));
1115 sysbus_mmio_map(SYS_BUS_DEVICE(&s->nswatchdog), 0, 0x40081000);
1116
1117 qdev_prop_set_uint32(DEVICE(&s->swatchdog), "wdogclk-frq", s->mainclk_frq);
1097 if (err) {
1098 error_propagate(errp, err);
1099 return;
1100 }
1101 sysbus_connect_irq(SYS_BUS_DEVICE(&s->nswatchdog), 0,
1102 armsse_get_common_irq_in(s, 1));
1103 sysbus_mmio_map(SYS_BUS_DEVICE(&s->nswatchdog), 0, 0x40081000);
1104
1105 qdev_prop_set_uint32(DEVICE(&s->swatchdog), "wdogclk-frq", s->mainclk_frq);
1118 object_property_set_bool(OBJECT(&s->swatchdog), true, "realized", &err);
1106 sysbus_realize(SYS_BUS_DEVICE(&s->swatchdog), &err);
1119 if (err) {
1120 error_propagate(errp, err);
1121 return;
1122 }
1123 sysbus_connect_irq(SYS_BUS_DEVICE(&s->swatchdog), 0,
1124 qdev_get_gpio_in(DEVICE(&s->nmi_orgate), 1));
1125 sysbus_mmio_map(SYS_BUS_DEVICE(&s->swatchdog), 0, 0x50081000);
1126

--- 186 unchanged lines hidden ---
1107 if (err) {
1108 error_propagate(errp, err);
1109 return;
1110 }
1111 sysbus_connect_irq(SYS_BUS_DEVICE(&s->swatchdog), 0,
1112 qdev_get_gpio_in(DEVICE(&s->nmi_orgate), 1));
1113 sysbus_mmio_map(SYS_BUS_DEVICE(&s->swatchdog), 0, 0x50081000);
1114

--- 186 unchanged lines hidden ---