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 --- |