aspeed queue:
* Introduce AspeedCoprocessor class and base implementation * Remove redudant functional tests to optimize for CI resources * Deprecate fp5280g2-bmc, qcom-dc-scm-v1-bmc, qcom-firework-bmc and sonorapass-bmc machines * Bump ASPEED SDK to v09.08 * Add PCIe and network tests -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmjs8/YACgkQUaNDx8/7 7KFjzw//dL7SV3fVdq5faOLVheXTj5IpgtsCaqcBl/KUSprkCV/PHE5wYUN0pKjA TBd9waKBt5yg9ppZC/5o20SLkKyrYLa3+2af6X+c0eHo1ALXMUC+Cupws514eEoe y9sq1TO+yag5OczUi6h0UCmz3ELK2KHRf8e3ca/0S8zLry5bcwYAu6BHig2wqKnN qOkIwz9lSIAem9IvXDbWN15x7nO8eKBlDUfnu9psPToVtRthXifwSgUGAMSndAh9 Sq9Qjf5Uy5QEocRuCq82xidpAwPRw/ulAe/1nMujHnWuZXx++uJ6PCtL2+pvzkV/ DZXP1J2elMfjRH+iy1NW/8TIZedv9mHR2qJ4XI7D/IZjpZN2NpjQSjVDapKs/SmX LI3kofQRT4OfZ98bhIMsZ7E0MA2i+SGtQSSfKPUqYT6298c6LefHINk9zZsMO8bR M4XKDS4yX9gNpM/j2LyxkL/gkMToHKVxmBJFNbC9DAo9AOJ/+iMnUFYT9F7J67jW LZwr490K73I1bORbrYStqnAnw0OEuzGVcehOrj7CzIuoy6nGc0yx1YeVDA8HT83Z WjCej+TOiDfKnq450VJ5r+CXBDMvwMzls5q5SVEjRN0vtQ04eXPNteUSHrvPLx7q tCTs7nzge5hUUZ5Yx5/uIs+341iMMq+U9JMLF71IFEqeIYUxHA0= =ubfO -----END PGP SIGNATURE----- Merge tag 'pull-aspeed-20251013' of https://github.com/legoater/qemu into staging aspeed queue: * Introduce AspeedCoprocessor class and base implementation * Remove redudant functional tests to optimize for CI resources * Deprecate fp5280g2-bmc, qcom-dc-scm-v1-bmc, qcom-firework-bmc and sonorapass-bmc machines * Bump ASPEED SDK to v09.08 * Add PCIe and network tests # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmjs8/YACgkQUaNDx8/7 # 7KFjzw//dL7SV3fVdq5faOLVheXTj5IpgtsCaqcBl/KUSprkCV/PHE5wYUN0pKjA # TBd9waKBt5yg9ppZC/5o20SLkKyrYLa3+2af6X+c0eHo1ALXMUC+Cupws514eEoe # y9sq1TO+yag5OczUi6h0UCmz3ELK2KHRf8e3ca/0S8zLry5bcwYAu6BHig2wqKnN # qOkIwz9lSIAem9IvXDbWN15x7nO8eKBlDUfnu9psPToVtRthXifwSgUGAMSndAh9 # Sq9Qjf5Uy5QEocRuCq82xidpAwPRw/ulAe/1nMujHnWuZXx++uJ6PCtL2+pvzkV/ # DZXP1J2elMfjRH+iy1NW/8TIZedv9mHR2qJ4XI7D/IZjpZN2NpjQSjVDapKs/SmX # LI3kofQRT4OfZ98bhIMsZ7E0MA2i+SGtQSSfKPUqYT6298c6LefHINk9zZsMO8bR # M4XKDS4yX9gNpM/j2LyxkL/gkMToHKVxmBJFNbC9DAo9AOJ/+iMnUFYT9F7J67jW # LZwr490K73I1bORbrYStqnAnw0OEuzGVcehOrj7CzIuoy6nGc0yx1YeVDA8HT83Z # WjCej+TOiDfKnq450VJ5r+CXBDMvwMzls5q5SVEjRN0vtQ04eXPNteUSHrvPLx7q # tCTs7nzge5hUUZ5Yx5/uIs+341iMMq+U9JMLF71IFEqeIYUxHA0= # =ubfO # -----END PGP SIGNATURE----- # gpg: Signature made Mon 13 Oct 2025 05:43:34 AM PDT # gpg: using RSA key A0F66548F04895EBFE6B0B6051A343C7CFFBECA1 # gpg: Good signature from "Cédric Le Goater <clg@redhat.com>" [full] # gpg: aka "Cédric Le Goater <clg@kaod.org>" [full] * tag 'pull-aspeed-20251013' of https://github.com/legoater/qemu: (29 commits) hw/arm/aspeed_ast27x0-{ssp,tsp}: Fix coding style hw/arm/aspeed_ast27x0-tsp: Rename type to TYPE_ASPEED27X0TSP_COPROCESSOR hw/arm/aspeed_ast27x0-ssp: Rename type to TYPE_ASPEED27X0SSP_COPROCESSOR hw/arm/aspeed_ast27x0-tsp: Change to use Aspeed27x0CoprocessorState hw/arm/aspeed_ast27x0-ssp: Change to use Aspeed27x0CoprocessorState hw/arm/aspeed_ast27x0-tsp: Make AST27x0 TSP inherit from AspeedCoprocessor instead of AspeedSoC hw/arm/aspeed_ast27x0-ssp: Make AST27x0 SSP inherit from AspeedCoprocessor instead of AspeedSoC hw/arm/aspeed: Introduce AspeedCoprocessor class and base implementation hw/arm/aspeed: Remove the aspeed_soc_get_irq and class get_irq hook hw/arm/aspeed: Remove AspeedSoCState dependency from aspeed_soc_uart_realize() API hw/arm/aspeed: Remove AspeedSoCState dependency from aspeed_mmio_map_unimplemented() API hw/arm/aspeed: Remove AspeedSoCState dependency from aspeed_mmio_map() API hw/arm/aspeed: Remove AspeedSoCClass dependency from aspeed_soc_cpu_type() API hw/arm/aspeed: Remove AspeedSoCState dependency from aspeed_soc_uart_set_chr() API hw/arm/aspeed: Remove AspeedSoCClass dependency from aspeed_uart_last() API hw/arm/aspeed: Remove AspeedSoCState dependency from aspeed_uart_first() API test/functional/aarch64: Split the ast2700a1-evb OpenBMC boot test test/functional/aarch64: Remove test for the ast2700a0-evb machine aspeed: Deprecate the fp5280g2-bmc machine aspeed: Deprecate the qcom-dc-scm-v1-bmc and qcom-firework-bmc machines ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
b905ac657b
22 changed files with 690 additions and 475 deletions
|
|
@ -285,6 +285,33 @@ and serves as the initial engineering sample rather than a production version.
|
|||
A newer revision, A1, is now supported, and the ``ast2700a1-evb`` should
|
||||
replace the older A0 version.
|
||||
|
||||
Arm ``sonorapass-bmc`` machine (since 10.2)
|
||||
'''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``sonorapass-bmc`` machine represents a lab server that never
|
||||
entered production. Since it does not rely on any specific device
|
||||
models, it can be replaced by the ``ast2500-evb`` machine using the
|
||||
``fmc-model`` option to specify the flash type. The I2C devices
|
||||
connected to the board can be defined via the QEMU command line.
|
||||
|
||||
Arm ``qcom-dc-scm-v1-bmc`` and ``qcom-firework-bmc`` machine (since 10.2)
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``qcom-dc-scm-v1-bmc`` and ``qcom-firework-bmc`` represent lab
|
||||
servers that never entered production. Since they do not rely on any
|
||||
specific device models, they can be replaced by the ``ast2600-evb``
|
||||
machine using the ``fmc-model`` option to specify the flash type. The
|
||||
I2C devices connected to the board can be defined via the QEMU command
|
||||
line.
|
||||
|
||||
Arm ``fp5280g2-bmc`` machine (since 10.2)
|
||||
'''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``fp5280g2-bmc`` machine does not rely on any specific device
|
||||
models, it can be replaced by the ``ast2500-evb`` machine using the
|
||||
``fmc-model`` option to specify the flash type. The I2C devices
|
||||
connected to the board can be defined via the QEMU command line.
|
||||
|
||||
RISC-V default machine option (since 10.0)
|
||||
''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
|
|
|
|||
|
|
@ -299,12 +299,14 @@ static void connect_serial_hds_to_uarts(AspeedMachineState *bmc)
|
|||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
int uart_chosen = bmc->uart_chosen ? bmc->uart_chosen : amc->uart_default;
|
||||
|
||||
aspeed_soc_uart_set_chr(s, uart_chosen, serial_hd(0));
|
||||
aspeed_soc_uart_set_chr(s->uart, uart_chosen, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(0));
|
||||
for (int i = 1, uart = sc->uarts_base; i < sc->uarts_num; uart++) {
|
||||
if (uart == uart_chosen) {
|
||||
continue;
|
||||
}
|
||||
aspeed_soc_uart_set_chr(s, uart, serial_hd(i++));
|
||||
aspeed_soc_uart_set_chr(s->uart, uart, sc->uarts_base, sc->uarts_num,
|
||||
serial_hd(i++));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1310,8 +1312,8 @@ static void aspeed_set_bmc_console(Object *obj, const char *value, Error **errp)
|
|||
AspeedMachineClass *amc = ASPEED_MACHINE_GET_CLASS(bmc);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_CLASS(object_class_by_name(amc->soc_name));
|
||||
int val;
|
||||
int uart_first = aspeed_uart_first(sc);
|
||||
int uart_last = aspeed_uart_last(sc);
|
||||
int uart_first = aspeed_uart_first(sc->uarts_base);
|
||||
int uart_last = aspeed_uart_last(sc->uarts_base, sc->uarts_num);
|
||||
|
||||
if (sscanf(value, "uart%u", &val) != 1) {
|
||||
error_setg(errp, "Bad value for \"uart\" property");
|
||||
|
|
@ -1418,7 +1420,6 @@ static void aspeed_machine_palmetto_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx25l25635f";
|
||||
amc->num_cs = 1;
|
||||
amc->i2c_init = palmetto_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 256 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1436,7 +1437,6 @@ static void aspeed_machine_quanta_q71l_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx25l25635e";
|
||||
amc->num_cs = 1;
|
||||
amc->i2c_init = quanta_q71l_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 128 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
|
@ -1455,7 +1455,6 @@ static void aspeed_machine_supermicrox11_bmc_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 1;
|
||||
amc->macs_mask = ASPEED_MAC0_ON | ASPEED_MAC1_ON;
|
||||
amc->i2c_init = palmetto_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 256 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
|
@ -1474,7 +1473,6 @@ static void aspeed_machine_supermicro_x11spi_bmc_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 1;
|
||||
amc->macs_mask = ASPEED_MAC0_ON | ASPEED_MAC1_ON;
|
||||
amc->i2c_init = palmetto_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
|
@ -1492,7 +1490,6 @@ static void aspeed_machine_ast2500_evb_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx25l25635f";
|
||||
amc->num_cs = 1;
|
||||
amc->i2c_init = ast2500_evb_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1511,7 +1508,6 @@ static void aspeed_machine_yosemitev2_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx25l25635e";
|
||||
amc->num_cs = 2;
|
||||
amc->i2c_init = yosemitev2_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1529,7 +1525,6 @@ static void aspeed_machine_romulus_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx66l1g45g";
|
||||
amc->num_cs = 2;
|
||||
amc->i2c_init = romulus_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1548,7 +1543,6 @@ static void aspeed_machine_tiogapass_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx25l25635e";
|
||||
amc->num_cs = 2;
|
||||
amc->i2c_init = tiogapass_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1560,13 +1554,13 @@ static void aspeed_machine_sonorapass_class_init(ObjectClass *oc,
|
|||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "OCP SonoraPass BMC (ARM1176)";
|
||||
mc->deprecation_reason = "use 'ast2500-evb' instead";
|
||||
amc->soc_name = "ast2500-a1";
|
||||
amc->hw_strap1 = SONORAPASS_BMC_HW_STRAP1;
|
||||
amc->fmc_model = "mx66l1g45g";
|
||||
amc->spi_model = "mx66l1g45g";
|
||||
amc->num_cs = 2;
|
||||
amc->i2c_init = sonorapass_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1584,7 +1578,6 @@ static void aspeed_machine_witherspoon_class_init(ObjectClass *oc,
|
|||
amc->spi_model = "mx66l1g45g";
|
||||
amc->num_cs = 2;
|
||||
amc->i2c_init = witherspoon_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1606,7 +1599,6 @@ static void aspeed_machine_ast2600_evb_class_init(ObjectClass *oc,
|
|||
ASPEED_MAC3_ON;
|
||||
amc->sdhci_wp_inverted = true;
|
||||
amc->i2c_init = ast2600_evb_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
aspeed_machine_ast2600_class_emmc_init(oc);
|
||||
|
|
@ -1625,7 +1617,6 @@ static void aspeed_machine_g220a_class_init(ObjectClass *oc, const void *data)
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC0_ON | ASPEED_MAC1_ON;
|
||||
amc->i2c_init = g220a_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1024 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1637,6 +1628,7 @@ static void aspeed_machine_fp5280g2_class_init(ObjectClass *oc,
|
|||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Inspur FP5280G2 BMC (ARM1176)";
|
||||
mc->deprecation_reason = "use 'ast2500-evb' instead";
|
||||
amc->soc_name = "ast2500-a1";
|
||||
amc->hw_strap1 = FP5280G2_BMC_HW_STRAP1;
|
||||
amc->fmc_model = "n25q512a";
|
||||
|
|
@ -1644,7 +1636,6 @@ static void aspeed_machine_fp5280g2_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC0_ON | ASPEED_MAC1_ON;
|
||||
amc->i2c_init = fp5280g2_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 512 * MiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1663,7 +1654,6 @@ static void aspeed_machine_rainier_class_init(ObjectClass *oc, const void *data)
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC2_ON | ASPEED_MAC3_ON;
|
||||
amc->i2c_init = rainier_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
aspeed_machine_ast2600_class_emmc_init(oc);
|
||||
|
|
@ -1686,7 +1676,6 @@ static void aspeed_machine_fuji_class_init(ObjectClass *oc, const void *data)
|
|||
amc->macs_mask = ASPEED_MAC3_ON;
|
||||
amc->i2c_init = fuji_bmc_i2c_init;
|
||||
amc->uart_default = ASPEED_DEV_UART1;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = FUJI_BMC_RAM_SIZE;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1708,7 +1697,6 @@ static void aspeed_machine_bletchley_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC2_ON;
|
||||
amc->i2c_init = bletchley_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = BLETCHLEY_BMC_RAM_SIZE;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
|
@ -1728,7 +1716,6 @@ static void aspeed_machine_catalina_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC2_ON;
|
||||
amc->i2c_init = catalina_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = CATALINA_BMC_RAM_SIZE;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
aspeed_machine_ast2600_class_emmc_init(oc);
|
||||
|
|
@ -1796,7 +1783,6 @@ static void aspeed_machine_fby35_class_init(ObjectClass *oc, const void *data)
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC3_ON;
|
||||
amc->i2c_init = fby35_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
/* FIXME: Replace this macro with something more general */
|
||||
mc->default_ram_size = FUJI_BMC_RAM_SIZE;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
|
|
@ -1909,7 +1895,6 @@ static void aspeed_machine_ast2700a0_evb_class_init(ObjectClass *oc,
|
|||
amc->uart_default = ASPEED_DEV_UART12;
|
||||
amc->i2c_init = ast2700_evb_i2c_init;
|
||||
amc->vbootrom = true;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
|
@ -1932,7 +1917,6 @@ static void aspeed_machine_ast2700a1_evb_class_init(ObjectClass *oc,
|
|||
amc->uart_default = ASPEED_DEV_UART12;
|
||||
amc->i2c_init = ast2700_evb_i2c_init;
|
||||
amc->vbootrom = true;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
}
|
||||
|
|
@ -1945,6 +1929,7 @@ static void aspeed_machine_qcom_dc_scm_v1_class_init(ObjectClass *oc,
|
|||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Qualcomm DC-SCM V1 BMC (Cortex A7)";
|
||||
mc->deprecation_reason = "use 'ast2600-evb' instead";
|
||||
amc->soc_name = "ast2600-a3";
|
||||
amc->hw_strap1 = QCOM_DC_SCM_V1_BMC_HW_STRAP1;
|
||||
amc->hw_strap2 = QCOM_DC_SCM_V1_BMC_HW_STRAP2;
|
||||
|
|
@ -1953,7 +1938,6 @@ static void aspeed_machine_qcom_dc_scm_v1_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC2_ON | ASPEED_MAC3_ON;
|
||||
amc->i2c_init = qcom_dc_scm_bmc_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
@ -1965,6 +1949,7 @@ static void aspeed_machine_qcom_firework_class_init(ObjectClass *oc,
|
|||
AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
|
||||
|
||||
mc->desc = "Qualcomm DC-SCM V1/Firework BMC (Cortex A7)";
|
||||
mc->deprecation_reason = "use 'ast2600-evb' instead";
|
||||
amc->soc_name = "ast2600-a3";
|
||||
amc->hw_strap1 = QCOM_DC_SCM_V1_BMC_HW_STRAP1;
|
||||
amc->hw_strap2 = QCOM_DC_SCM_V1_BMC_HW_STRAP2;
|
||||
|
|
@ -1973,7 +1958,6 @@ static void aspeed_machine_qcom_firework_class_init(ObjectClass *oc,
|
|||
amc->num_cs = 2;
|
||||
amc->macs_mask = ASPEED_MAC2_ON | ASPEED_MAC3_ON;
|
||||
amc->i2c_init = qcom_dc_scm_firework_i2c_init;
|
||||
mc->auto_create_sdcard = true;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
DeviceState *armv7m;
|
||||
Error *err = NULL;
|
||||
int uart;
|
||||
int i;
|
||||
g_autofree char *sram_name = NULL;
|
||||
|
||||
|
|
@ -201,17 +202,20 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
}
|
||||
|
||||
/* General I/O memory space to catch all unimplemented device */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem), "aspeed.io",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->iomem),
|
||||
"aspeed.io",
|
||||
sc->memmap[ASPEED_DEV_IOMEM],
|
||||
ASPEED_SOC_IOMEM_SIZE);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->sbc_unimplemented),
|
||||
aspeed_mmio_map_unimplemented(s->memory,
|
||||
SYS_BUS_DEVICE(&s->sbc_unimplemented),
|
||||
"aspeed.sbc", sc->memmap[ASPEED_DEV_SBC],
|
||||
0x40000);
|
||||
|
||||
/* AST1030 CPU Core */
|
||||
armv7m = DEVICE(&a->armv7m);
|
||||
qdev_prop_set_uint32(armv7m, "num-irq", 256);
|
||||
qdev_prop_set_string(armv7m, "cpu-type", aspeed_soc_cpu_type(sc));
|
||||
qdev_prop_set_string(armv7m, "cpu-type",
|
||||
aspeed_soc_cpu_type(sc->valid_cpu_types));
|
||||
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
|
||||
object_property_set_link(OBJECT(&a->armv7m), "memory",
|
||||
OBJECT(s->memory), &error_abort);
|
||||
|
|
@ -241,7 +245,8 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
|
||||
/* I2C */
|
||||
|
||||
|
|
@ -250,7 +255,8 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->i2c), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i2c), 0, sc->memmap[ASPEED_DEV_I2C]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->i2c), 0,
|
||||
sc->memmap[ASPEED_DEV_I2C]);
|
||||
for (i = 0; i < ASPEED_I2C_GET_CLASS(&s->i2c)->num_busses; i++) {
|
||||
qemu_irq irq = qdev_get_gpio_in(DEVICE(&a->armv7m),
|
||||
sc->irqmap[ASPEED_DEV_I2C] + i);
|
||||
|
|
@ -262,7 +268,8 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->i3c), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i3c), 0, sc->memmap[ASPEED_DEV_I3C]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->i3c), 0,
|
||||
sc->memmap[ASPEED_DEV_I3C]);
|
||||
for (i = 0; i < ASPEED_I3C_NR_DEVICES; i++) {
|
||||
qemu_irq irq = qdev_get_gpio_in(DEVICE(&a->armv7m),
|
||||
sc->irqmap[ASPEED_DEV_I3C] + i);
|
||||
|
|
@ -274,20 +281,21 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->peci), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->peci), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->peci), 0,
|
||||
sc->memmap[ASPEED_DEV_PECI]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->peci), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_PECI));
|
||||
aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_PECI));
|
||||
|
||||
/* LPC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->lpc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->lpc), 0, sc->memmap[ASPEED_DEV_LPC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->lpc), 0,
|
||||
sc->memmap[ASPEED_DEV_LPC]);
|
||||
|
||||
/* Connect the LPC IRQ to the GIC. It is otherwise unused. */
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_LPC));
|
||||
aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_LPC));
|
||||
|
||||
/*
|
||||
* On the AST1030 LPC subdevice IRQs are connected straight to the GIC.
|
||||
|
|
@ -309,8 +317,13 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_4));
|
||||
|
||||
/* UART */
|
||||
if (!aspeed_soc_uart_realize(s, errp)) {
|
||||
return;
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast1030_get_irq(s, uart));
|
||||
}
|
||||
|
||||
/* Timer */
|
||||
|
|
@ -319,10 +332,10 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->timerctrl), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
sc->memmap[ASPEED_DEV_TIMER1]);
|
||||
for (i = 0; i < ASPEED_TIMER_NR_TIMERS; i++) {
|
||||
qemu_irq irq = aspeed_soc_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
qemu_irq irq = aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->timerctrl), i, irq);
|
||||
}
|
||||
|
||||
|
|
@ -330,9 +343,10 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->adc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->adc), 0, sc->memmap[ASPEED_DEV_ADC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->adc), 0,
|
||||
sc->memmap[ASPEED_DEV_ADC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ADC));
|
||||
aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_ADC));
|
||||
|
||||
/* FMC, The number of CS is set at the board level */
|
||||
object_property_set_link(OBJECT(&s->fmc), "dram", OBJECT(&s->sram),
|
||||
|
|
@ -340,11 +354,12 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->fmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 0, sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->fmc)->flash_window_base);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
||||
aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_FMC));
|
||||
|
||||
/* SPI */
|
||||
for (i = 0; i < sc->spis_num; i++) {
|
||||
|
|
@ -353,9 +368,9 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->spi[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_SPI1 + i]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
|
||||
}
|
||||
|
||||
|
|
@ -363,7 +378,8 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sbc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sbc), 0, sc->memmap[ASPEED_DEV_SBC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sbc), 0,
|
||||
sc->memmap[ASPEED_DEV_SBC]);
|
||||
|
||||
/* HACE */
|
||||
object_property_set_link(OBJECT(&s->hace), "dram", OBJECT(&s->sram),
|
||||
|
|
@ -371,10 +387,10 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->hace), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
sc->memmap[ASPEED_DEV_HACE]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_HACE));
|
||||
aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_HACE));
|
||||
|
||||
/* Watch dog */
|
||||
for (i = 0; i < sc->wdts_num; i++) {
|
||||
|
|
@ -386,32 +402,38 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->wdt[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
}
|
||||
|
||||
/* GPIO */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
sc->memmap[ASPEED_DEV_GPIO]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_GPIO));
|
||||
aspeed_soc_ast1030_get_irq(s, ASPEED_DEV_GPIO));
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->pwm), "aspeed.pwm",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->pwm),
|
||||
"aspeed.pwm",
|
||||
sc->memmap[ASPEED_DEV_PWM], 0x100);
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->espi), "aspeed.espi",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->espi),
|
||||
"aspeed.espi",
|
||||
sc->memmap[ASPEED_DEV_ESPI], 0x800);
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->udc), "aspeed.udc",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->udc),
|
||||
"aspeed.udc",
|
||||
sc->memmap[ASPEED_DEV_UDC], 0x1000);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->sgpiom), "aspeed.sgpiom",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->sgpiom),
|
||||
"aspeed.sgpiom",
|
||||
sc->memmap[ASPEED_DEV_SGPIOM], 0x100);
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->jtag[0]), "aspeed.jtag",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->jtag[0]),
|
||||
"aspeed.jtag",
|
||||
sc->memmap[ASPEED_DEV_JTAG0], 0x20);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->jtag[1]), "aspeed.jtag",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->jtag[1]),
|
||||
"aspeed.jtag",
|
||||
sc->memmap[ASPEED_DEV_JTAG1], 0x20);
|
||||
}
|
||||
|
||||
|
|
@ -441,7 +463,6 @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, const void *data)
|
|||
sc->irqmap = aspeed_soc_ast1030_irqmap;
|
||||
sc->memmap = aspeed_soc_ast1030_memmap;
|
||||
sc->num_cpus = 1;
|
||||
sc->get_irq = aspeed_soc_ast1030_get_irq;
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_soc_ast10x0_types[] = {
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ static void aspeed_ast2400_soc_init(Object *obj)
|
|||
|
||||
for (i = 0; i < sc->num_cpus; i++) {
|
||||
object_initialize_child(obj, "cpu[*]", &a->cpu[i],
|
||||
aspeed_soc_cpu_type(sc));
|
||||
aspeed_soc_cpu_type(sc->valid_cpu_types));
|
||||
}
|
||||
|
||||
snprintf(typename, sizeof(typename), "aspeed.scu-%s", socname);
|
||||
|
|
@ -251,6 +251,7 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
AspeedSoCState *s = ASPEED_SOC(dev);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
g_autofree char *sram_name = NULL;
|
||||
int uart;
|
||||
|
||||
/* Default boot region (SPI memory or ROMs) */
|
||||
memory_region_init(&s->spi_boot_container, OBJECT(s),
|
||||
|
|
@ -259,12 +260,14 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
&s->spi_boot_container);
|
||||
|
||||
/* IO space */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem), "aspeed.io",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->iomem),
|
||||
"aspeed.io",
|
||||
sc->memmap[ASPEED_DEV_IOMEM],
|
||||
ASPEED_SOC_IOMEM_SIZE);
|
||||
|
||||
/* Video engine stub */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->video), "aspeed.video",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->video),
|
||||
"aspeed.video",
|
||||
sc->memmap[ASPEED_DEV_VIDEO], 0x1000);
|
||||
|
||||
/* CPU */
|
||||
|
|
@ -289,13 +292,15 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
|
||||
/* VIC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&a->vic), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->vic), 0, sc->memmap[ASPEED_DEV_VIC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->vic), 0,
|
||||
sc->memmap[ASPEED_DEV_VIC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&a->vic), 0,
|
||||
qdev_get_gpio_in(DEVICE(&a->cpu), ARM_CPU_IRQ));
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&a->vic), 1,
|
||||
|
|
@ -305,9 +310,10 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->rtc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->rtc), 0, sc->memmap[ASPEED_DEV_RTC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->rtc), 0,
|
||||
sc->memmap[ASPEED_DEV_RTC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->rtc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_RTC));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_RTC));
|
||||
|
||||
/* Timer */
|
||||
object_property_set_link(OBJECT(&s->timerctrl), "scu", OBJECT(&s->scu),
|
||||
|
|
@ -315,10 +321,10 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->timerctrl), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
sc->memmap[ASPEED_DEV_TIMER1]);
|
||||
for (i = 0; i < ASPEED_TIMER_NR_TIMERS; i++) {
|
||||
qemu_irq irq = aspeed_soc_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
qemu_irq irq = aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->timerctrl), i, irq);
|
||||
}
|
||||
|
||||
|
|
@ -326,13 +332,19 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->adc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->adc), 0, sc->memmap[ASPEED_DEV_ADC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->adc), 0,
|
||||
sc->memmap[ASPEED_DEV_ADC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ADC));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_ADC));
|
||||
|
||||
/* UART */
|
||||
if (!aspeed_soc_uart_realize(s, errp)) {
|
||||
return;
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast2400_get_irq(s, uart));
|
||||
}
|
||||
|
||||
/* I2C */
|
||||
|
|
@ -341,18 +353,19 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->i2c), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i2c), 0, sc->memmap[ASPEED_DEV_I2C]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->i2c), 0,
|
||||
sc->memmap[ASPEED_DEV_I2C]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_I2C));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_I2C));
|
||||
|
||||
/* PECI */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->peci), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->peci), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->peci), 0,
|
||||
sc->memmap[ASPEED_DEV_PECI]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->peci), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_PECI));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_PECI));
|
||||
|
||||
/* FMC, The number of CS is set at the board level */
|
||||
object_property_set_link(OBJECT(&s->fmc), "dram", OBJECT(s->dram_mr),
|
||||
|
|
@ -360,11 +373,12 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->fmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 0, sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->fmc)->flash_window_base);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_FMC));
|
||||
|
||||
/* Set up an alias on the FMC CE0 region (boot default) */
|
||||
MemoryRegion *fmc0_mmio = &s->fmc.flashes[0].mmio;
|
||||
|
|
@ -377,9 +391,9 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->spi[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_SPI1 + i]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
|
||||
}
|
||||
|
||||
|
|
@ -388,17 +402,18 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ehci[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_EHCI1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_EHCI1 + i));
|
||||
aspeed_soc_ast2400_get_irq(s,
|
||||
ASPEED_DEV_EHCI1 + i));
|
||||
}
|
||||
|
||||
/* SDMC - SDRAM Memory Controller */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sdmc), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sdmc), 0,
|
||||
sc->memmap[ASPEED_DEV_SDMC]);
|
||||
|
||||
/* Watch dog */
|
||||
|
|
@ -411,7 +426,7 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->wdt[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
}
|
||||
|
||||
/* RAM */
|
||||
|
|
@ -426,48 +441,49 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ftgmac100[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_ETH1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ETH1 + i));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_ETH1 + i));
|
||||
}
|
||||
|
||||
/* XDMA */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->xdma), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->xdma), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->xdma), 0,
|
||||
sc->memmap[ASPEED_DEV_XDMA]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->xdma), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_XDMA));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_XDMA));
|
||||
|
||||
/* GPIO */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
sc->memmap[ASPEED_DEV_GPIO]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_GPIO));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_GPIO));
|
||||
|
||||
/* SDHCI */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdhci), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
sc->memmap[ASPEED_DEV_SDHCI]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_SDHCI));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_SDHCI));
|
||||
|
||||
/* LPC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->lpc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->lpc), 0, sc->memmap[ASPEED_DEV_LPC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->lpc), 0,
|
||||
sc->memmap[ASPEED_DEV_LPC]);
|
||||
|
||||
/* Connect the LPC IRQ to the VIC */
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_LPC));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_LPC));
|
||||
|
||||
/*
|
||||
* On the AST2400 and AST2500 the one LPC IRQ is shared between all of the
|
||||
|
|
@ -496,10 +512,10 @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->hace), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
sc->memmap[ASPEED_DEV_HACE]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_HACE));
|
||||
aspeed_soc_ast2400_get_irq(s, ASPEED_DEV_HACE));
|
||||
}
|
||||
|
||||
static void aspeed_soc_ast2400_class_init(ObjectClass *oc, const void *data)
|
||||
|
|
@ -527,7 +543,6 @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, const void *data)
|
|||
sc->irqmap = aspeed_soc_ast2400_irqmap;
|
||||
sc->memmap = aspeed_soc_ast2400_memmap;
|
||||
sc->num_cpus = 1;
|
||||
sc->get_irq = aspeed_soc_ast2400_get_irq;
|
||||
}
|
||||
|
||||
static void aspeed_soc_ast2500_class_init(ObjectClass *oc, const void *data)
|
||||
|
|
@ -555,7 +570,6 @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, const void *data)
|
|||
sc->irqmap = aspeed_soc_ast2500_irqmap;
|
||||
sc->memmap = aspeed_soc_ast2500_memmap;
|
||||
sc->num_cpus = 1;
|
||||
sc->get_irq = aspeed_soc_ast2400_get_irq;
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_soc_ast2400_types[] = {
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ static void aspeed_soc_ast2600_init(Object *obj)
|
|||
|
||||
for (i = 0; i < sc->num_cpus; i++) {
|
||||
object_initialize_child(obj, "cpu[*]", &a->cpu[i],
|
||||
aspeed_soc_cpu_type(sc));
|
||||
aspeed_soc_cpu_type(sc->valid_cpu_types));
|
||||
}
|
||||
|
||||
snprintf(typename, sizeof(typename), "aspeed.scu-%s", socname);
|
||||
|
|
@ -324,7 +324,7 @@ static bool aspeed_soc_ast2600_pcie_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->pcie_phy[0]), errp)) {
|
||||
return false;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->pcie_phy[0]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->pcie_phy[0]), 0,
|
||||
sc->memmap[ASPEED_DEV_PCIE_PHY1]);
|
||||
|
||||
object_property_set_int(OBJECT(&s->pcie[0]), "dram-base",
|
||||
|
|
@ -335,7 +335,7 @@ static bool aspeed_soc_ast2600_pcie_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->pcie[0]), errp)) {
|
||||
return false;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->pcie[0]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->pcie[0]), 0,
|
||||
sc->memmap[ASPEED_DEV_PCIE0]);
|
||||
|
||||
irq = qdev_get_gpio_in(DEVICE(&a->a7mpcore),
|
||||
|
|
@ -362,6 +362,7 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
qemu_irq irq;
|
||||
g_autofree char *sram_name = NULL;
|
||||
int uart;
|
||||
|
||||
/* Default boot region (SPI memory or ROMs) */
|
||||
memory_region_init(&s->spi_boot_container, OBJECT(s),
|
||||
|
|
@ -370,16 +371,19 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
&s->spi_boot_container);
|
||||
|
||||
/* IO space */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem), "aspeed.io",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->iomem),
|
||||
"aspeed.io",
|
||||
sc->memmap[ASPEED_DEV_IOMEM],
|
||||
ASPEED_SOC_IOMEM_SIZE);
|
||||
|
||||
/* Video engine stub */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->video), "aspeed.video",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->video),
|
||||
"aspeed.video",
|
||||
sc->memmap[ASPEED_DEV_VIDEO], 0x1000);
|
||||
|
||||
/* eMMC Boot Controller stub */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->emmc_boot_controller),
|
||||
aspeed_mmio_map_unimplemented(s->memory,
|
||||
SYS_BUS_DEVICE(&s->emmc_boot_controller),
|
||||
"aspeed.emmc-boot-controller",
|
||||
sc->memmap[ASPEED_DEV_EMMC_BC], 0x1000);
|
||||
|
||||
|
|
@ -414,7 +418,8 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
&error_abort);
|
||||
|
||||
sysbus_realize(SYS_BUS_DEVICE(&a->a7mpcore), &error_abort);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->a7mpcore), 0, ASPEED_A7MPCORE_ADDR);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->a7mpcore), 0,
|
||||
ASPEED_A7MPCORE_ADDR);
|
||||
|
||||
for (i = 0; i < sc->num_cpus; i++) {
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(&a->a7mpcore);
|
||||
|
|
@ -440,7 +445,8 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
sc->memmap[ASPEED_DEV_SRAM], &s->sram);
|
||||
|
||||
/* DPMCU */
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->dpmcu), "aspeed.dpmcu",
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->dpmcu),
|
||||
"aspeed.dpmcu",
|
||||
sc->memmap[ASPEED_DEV_DPMCU],
|
||||
ASPEED_SOC_DPMCU_SIZE);
|
||||
|
||||
|
|
@ -448,15 +454,17 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
|
||||
/* RTC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->rtc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->rtc), 0, sc->memmap[ASPEED_DEV_RTC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->rtc), 0,
|
||||
sc->memmap[ASPEED_DEV_RTC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->rtc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_RTC));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_RTC));
|
||||
|
||||
/* Timer */
|
||||
object_property_set_link(OBJECT(&s->timerctrl), "scu", OBJECT(&s->scu),
|
||||
|
|
@ -464,10 +472,10 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->timerctrl), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
sc->memmap[ASPEED_DEV_TIMER1]);
|
||||
for (i = 0; i < ASPEED_TIMER_NR_TIMERS; i++) {
|
||||
irq = aspeed_soc_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
irq = aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->timerctrl), i, irq);
|
||||
}
|
||||
|
||||
|
|
@ -475,13 +483,19 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->adc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->adc), 0, sc->memmap[ASPEED_DEV_ADC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->adc), 0,
|
||||
sc->memmap[ASPEED_DEV_ADC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ADC));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_ADC));
|
||||
|
||||
/* UART */
|
||||
if (!aspeed_soc_uart_realize(s, errp)) {
|
||||
return;
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast2600_get_irq(s, uart));
|
||||
}
|
||||
|
||||
/* I2C */
|
||||
|
|
@ -490,7 +504,8 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->i2c), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i2c), 0, sc->memmap[ASPEED_DEV_I2C]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->i2c), 0,
|
||||
sc->memmap[ASPEED_DEV_I2C]);
|
||||
for (i = 0; i < ASPEED_I2C_GET_CLASS(&s->i2c)->num_busses; i++) {
|
||||
irq = qdev_get_gpio_in(DEVICE(&a->a7mpcore),
|
||||
sc->irqmap[ASPEED_DEV_I2C] + i);
|
||||
|
|
@ -502,10 +517,10 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->peci), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->peci), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->peci), 0,
|
||||
sc->memmap[ASPEED_DEV_PECI]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->peci), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_PECI));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_PECI));
|
||||
|
||||
/* PCIe Root Complex (RC) */
|
||||
if (!aspeed_soc_ast2600_pcie_realize(dev, errp)) {
|
||||
|
|
@ -518,11 +533,12 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->fmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 0, sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->fmc)->flash_window_base);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_FMC));
|
||||
|
||||
/* Set up an alias on the FMC CE0 region (boot default) */
|
||||
MemoryRegion *fmc0_mmio = &s->fmc.flashes[0].mmio;
|
||||
|
|
@ -537,9 +553,9 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->spi[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_SPI1 + i]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
|
||||
}
|
||||
|
||||
|
|
@ -548,17 +564,18 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ehci[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_EHCI1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_EHCI1 + i));
|
||||
aspeed_soc_ast2600_get_irq(s,
|
||||
ASPEED_DEV_EHCI1 + i));
|
||||
}
|
||||
|
||||
/* SDMC - SDRAM Memory Controller */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sdmc), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sdmc), 0,
|
||||
sc->memmap[ASPEED_DEV_SDMC]);
|
||||
|
||||
/* Watch dog */
|
||||
|
|
@ -571,7 +588,7 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->wdt[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
}
|
||||
|
||||
/* RAM */
|
||||
|
|
@ -586,10 +603,10 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ftgmac100[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_ETH1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ETH1 + i));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_ETH1 + i));
|
||||
|
||||
object_property_set_link(OBJECT(&s->mii[i]), "nic",
|
||||
OBJECT(&s->ftgmac100[i]), &error_abort);
|
||||
|
|
@ -597,7 +614,7 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->mii[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->mii[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_MII1 + i]);
|
||||
}
|
||||
|
||||
|
|
@ -605,55 +622,56 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->xdma), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->xdma), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->xdma), 0,
|
||||
sc->memmap[ASPEED_DEV_XDMA]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->xdma), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_XDMA));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_XDMA));
|
||||
|
||||
/* GPIO */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
sc->memmap[ASPEED_DEV_GPIO]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_GPIO));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_GPIO));
|
||||
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio_1_8v), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->gpio_1_8v), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->gpio_1_8v), 0,
|
||||
sc->memmap[ASPEED_DEV_GPIO_1_8V]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio_1_8v), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_GPIO_1_8V));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_GPIO_1_8V));
|
||||
|
||||
/* SDHCI */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdhci), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
sc->memmap[ASPEED_DEV_SDHCI]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_SDHCI));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_SDHCI));
|
||||
|
||||
/* eMMC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->emmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->emmc), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->emmc), 0,
|
||||
sc->memmap[ASPEED_DEV_EMMC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->emmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_EMMC));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_EMMC));
|
||||
|
||||
/* LPC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->lpc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->lpc), 0, sc->memmap[ASPEED_DEV_LPC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->lpc), 0,
|
||||
sc->memmap[ASPEED_DEV_LPC]);
|
||||
|
||||
/* Connect the LPC IRQ to the GIC. It is otherwise unused. */
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_LPC));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_LPC));
|
||||
|
||||
/*
|
||||
* On the AST2600 LPC subdevice IRQs are connected straight to the GIC.
|
||||
|
|
@ -685,16 +703,17 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->hace), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
sc->memmap[ASPEED_DEV_HACE]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_HACE));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_HACE));
|
||||
|
||||
/* I3C */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->i3c), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i3c), 0, sc->memmap[ASPEED_DEV_I3C]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->i3c), 0,
|
||||
sc->memmap[ASPEED_DEV_I3C]);
|
||||
for (i = 0; i < ASPEED_I3C_NR_DEVICES; i++) {
|
||||
irq = qdev_get_gpio_in(DEVICE(&a->a7mpcore),
|
||||
sc->irqmap[ASPEED_DEV_I3C] + i);
|
||||
|
|
@ -706,17 +725,18 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sbc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sbc), 0, sc->memmap[ASPEED_DEV_SBC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sbc), 0,
|
||||
sc->memmap[ASPEED_DEV_SBC]);
|
||||
|
||||
/* FSI */
|
||||
for (i = 0; i < ASPEED_FSI_NUM; i++) {
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->fsi[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fsi[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fsi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_FSI1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fsi[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FSI1 + i));
|
||||
aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_FSI1 + i));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -752,7 +772,6 @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, const void *data)
|
|||
sc->irqmap = aspeed_soc_ast2600_irqmap;
|
||||
sc->memmap = aspeed_soc_ast2600_memmap;
|
||||
sc->num_cpus = 2;
|
||||
sc->get_irq = aspeed_soc_ast2600_get_irq;
|
||||
sc->boot_from_emmc = aspeed_soc_ast2600_boot_from_emmc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
#include "hw/loader.h"
|
||||
#include "hw/arm/boot.h"
|
||||
#include "hw/block/flash.h"
|
||||
|
||||
#include "hw/arm/aspeed_coprocessor.h"
|
||||
|
||||
#define TYPE_AST2700A1FC MACHINE_TYPE_NAME("ast2700fc")
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(Ast2700FCState, AST2700A1FC);
|
||||
|
|
@ -42,8 +42,8 @@ struct Ast2700FCState {
|
|||
Clock *tsp_sysclk;
|
||||
|
||||
Aspeed27x0SoCState ca35;
|
||||
Aspeed27x0SSPSoCState ssp;
|
||||
Aspeed27x0TSPSoCState tsp;
|
||||
Aspeed27x0CoprocessorState ssp;
|
||||
Aspeed27x0CoprocessorState tsp;
|
||||
|
||||
bool mmio_exec;
|
||||
};
|
||||
|
|
@ -91,7 +91,8 @@ static bool ast2700fc_ca35_init(MachineState *machine, Error **errp)
|
|||
AST2700FC_HW_STRAP1, &error_abort);
|
||||
object_property_set_int(OBJECT(&s->ca35), "hw-strap2",
|
||||
AST2700FC_HW_STRAP2, &error_abort);
|
||||
aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART12, serial_hd(0));
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART12, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(0));
|
||||
if (!qdev_realize(DEVICE(&s->ca35), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -114,12 +115,14 @@ static bool ast2700fc_ca35_init(MachineState *machine, Error **errp)
|
|||
|
||||
static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
||||
{
|
||||
AspeedSoCState *soc;
|
||||
AspeedCoprocessorState *soc;
|
||||
AspeedCoprocessorClass *sc;
|
||||
Ast2700FCState *s = AST2700A1FC(machine);
|
||||
s->ssp_sysclk = clock_new(OBJECT(s), "SSP_SYSCLK");
|
||||
clock_set_hz(s->ssp_sysclk, 200000000ULL);
|
||||
|
||||
object_initialize_child(OBJECT(s), "ssp", &s->ssp, TYPE_ASPEED27X0SSP_SOC);
|
||||
object_initialize_child(OBJECT(s), "ssp", &s->ssp,
|
||||
TYPE_ASPEED27X0SSP_COPROCESSOR);
|
||||
memory_region_init(&s->ssp_memory, OBJECT(&s->ssp), "ssp-memory",
|
||||
UINT64_MAX);
|
||||
|
||||
|
|
@ -127,8 +130,10 @@ static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
|||
object_property_set_link(OBJECT(&s->ssp), "memory",
|
||||
OBJECT(&s->ssp_memory), &error_abort);
|
||||
|
||||
soc = ASPEED_SOC(&s->ssp);
|
||||
aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART4, serial_hd(1));
|
||||
soc = ASPEED_COPROCESSOR(&s->ssp);
|
||||
sc = ASPEED_COPROCESSOR_GET_CLASS(soc);
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART4, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(1));
|
||||
if (!qdev_realize(DEVICE(&s->ssp), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -138,12 +143,14 @@ static bool ast2700fc_ssp_init(MachineState *machine, Error **errp)
|
|||
|
||||
static bool ast2700fc_tsp_init(MachineState *machine, Error **errp)
|
||||
{
|
||||
AspeedSoCState *soc;
|
||||
AspeedCoprocessorState *soc;
|
||||
AspeedCoprocessorClass *sc;
|
||||
Ast2700FCState *s = AST2700A1FC(machine);
|
||||
s->tsp_sysclk = clock_new(OBJECT(s), "TSP_SYSCLK");
|
||||
clock_set_hz(s->tsp_sysclk, 200000000ULL);
|
||||
|
||||
object_initialize_child(OBJECT(s), "tsp", &s->tsp, TYPE_ASPEED27X0TSP_SOC);
|
||||
object_initialize_child(OBJECT(s), "tsp", &s->tsp,
|
||||
TYPE_ASPEED27X0TSP_COPROCESSOR);
|
||||
memory_region_init(&s->tsp_memory, OBJECT(&s->tsp), "tsp-memory",
|
||||
UINT64_MAX);
|
||||
|
||||
|
|
@ -151,8 +158,10 @@ static bool ast2700fc_tsp_init(MachineState *machine, Error **errp)
|
|||
object_property_set_link(OBJECT(&s->tsp), "memory",
|
||||
OBJECT(&s->tsp_memory), &error_abort);
|
||||
|
||||
soc = ASPEED_SOC(&s->tsp);
|
||||
aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART7, serial_hd(2));
|
||||
soc = ASPEED_COPROCESSOR(&s->tsp);
|
||||
sc = ASPEED_COPROCESSOR_GET_CLASS(soc);
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART7, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(2));
|
||||
if (!qdev_realize(DEVICE(&s->tsp), NULL, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* ASPEED Ast27x0 SSP SoC
|
||||
* ASPEED Ast27x0 SSP Coprocessor
|
||||
*
|
||||
* Copyright (C) 2025 ASPEED Technology Inc.
|
||||
*
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
#include "hw/qdev-clock.h"
|
||||
#include "hw/misc/unimp.h"
|
||||
#include "hw/arm/aspeed_soc.h"
|
||||
#include "hw/arm/aspeed_coprocessor.h"
|
||||
|
||||
#define AST2700_SSP_RAM_SIZE (32 * MiB)
|
||||
|
||||
|
|
@ -104,10 +105,11 @@ static struct nvic_intc_irq_info ast2700_ssp_intcmap[] = {
|
|||
{136, 0, 9, NULL},
|
||||
};
|
||||
|
||||
static qemu_irq aspeed_soc_ast27x0ssp_get_irq(AspeedSoCState *s, int dev)
|
||||
static qemu_irq aspeed_soc_ast27x0ssp_get_irq(AspeedCoprocessorState *s,
|
||||
int dev)
|
||||
{
|
||||
Aspeed27x0SSPSoCState *a = ASPEED27X0SSP_SOC(s);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(s);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
|
||||
int or_idx;
|
||||
int idx;
|
||||
|
|
@ -128,9 +130,9 @@ static qemu_irq aspeed_soc_ast27x0ssp_get_irq(AspeedSoCState *s, int dev)
|
|||
|
||||
static void aspeed_soc_ast27x0ssp_init(Object *obj)
|
||||
{
|
||||
Aspeed27x0SSPSoCState *a = ASPEED27X0SSP_SOC(obj);
|
||||
AspeedSoCState *s = ASPEED_SOC(obj);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(obj);
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(obj);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
int i;
|
||||
|
||||
object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M);
|
||||
|
|
@ -159,11 +161,12 @@ static void aspeed_soc_ast27x0ssp_init(Object *obj)
|
|||
|
||||
static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
||||
{
|
||||
Aspeed27x0SSPSoCState *a = ASPEED27X0SSP_SOC(dev_soc);
|
||||
AspeedSoCState *s = ASPEED_SOC(dev_soc);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0SSP_COPROCESSOR(dev_soc);
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev_soc);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
DeviceState *armv7m;
|
||||
g_autofree char *sram_name = NULL;
|
||||
int uart;
|
||||
int i;
|
||||
|
||||
if (!clock_has_source(s->sysclk)) {
|
||||
|
|
@ -174,7 +177,8 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
/* AST27X0 SSP Core */
|
||||
armv7m = DEVICE(&a->armv7m);
|
||||
qdev_prop_set_uint32(armv7m, "num-irq", 256);
|
||||
qdev_prop_set_string(armv7m, "cpu-type", aspeed_soc_cpu_type(sc));
|
||||
qdev_prop_set_string(armv7m, "cpu-type",
|
||||
aspeed_soc_cpu_type(sc->valid_cpu_types));
|
||||
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
|
||||
object_property_set_link(OBJECT(&a->armv7m), "memory",
|
||||
OBJECT(s->memory), &error_abort);
|
||||
|
|
@ -183,8 +187,8 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
sram_name = g_strdup_printf("aspeed.dram.%d",
|
||||
CPU(a->armv7m.cpu)->cpu_index);
|
||||
|
||||
if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size,
|
||||
errp)) {
|
||||
if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name,
|
||||
AST2700_SSP_RAM_SIZE, errp)) {
|
||||
return;
|
||||
}
|
||||
memory_region_add_subregion(s->memory,
|
||||
|
|
@ -195,14 +199,15 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
|
||||
/* INTC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&a->intc[0]), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->intc[0]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->intc[0]), 0,
|
||||
sc->memmap[ASPEED_DEV_INTC]);
|
||||
|
||||
/* INTCIO */
|
||||
|
|
@ -210,7 +215,7 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->intc[1]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->intc[1]), 0,
|
||||
sc->memmap[ASPEED_DEV_INTCIO]);
|
||||
|
||||
/* irq source orgates -> INTC0 */
|
||||
|
|
@ -235,57 +240,56 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
|
|||
qdev_get_gpio_in(DEVICE(&a->intc[0].orgates[0]), i));
|
||||
}
|
||||
/* UART */
|
||||
if (!aspeed_soc_uart_realize(s, errp)) {
|
||||
return;
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast27x0ssp_get_irq(s, uart));
|
||||
}
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->timerctrl),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->timerctrl),
|
||||
"aspeed.timerctrl",
|
||||
sc->memmap[ASPEED_DEV_TIMER1], 0x200);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&a->ipc[0]),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->ipc[0]),
|
||||
"aspeed.ipc0",
|
||||
sc->memmap[ASPEED_DEV_IPC0], 0x1000);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&a->ipc[1]),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->ipc[1]),
|
||||
"aspeed.ipc1",
|
||||
sc->memmap[ASPEED_DEV_IPC1], 0x1000);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&a->scuio),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->scuio),
|
||||
"aspeed.scuio",
|
||||
sc->memmap[ASPEED_DEV_SCUIO], 0x1000);
|
||||
}
|
||||
|
||||
static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass, const void *data)
|
||||
static void aspeed_soc_ast27x0ssp_class_init(ObjectClass *klass,
|
||||
const void *data)
|
||||
{
|
||||
static const char * const valid_cpu_types[] = {
|
||||
ARM_CPU_TYPE_NAME("cortex-m4"), /* TODO: cortex-m4f */
|
||||
NULL
|
||||
};
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_CLASS(dc);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_CLASS(dc);
|
||||
|
||||
/* Reason: The Aspeed SoC can only be instantiated from a board */
|
||||
/* Reason: The Aspeed Coprocessor can only be instantiated from a board */
|
||||
dc->user_creatable = false;
|
||||
dc->realize = aspeed_soc_ast27x0ssp_realize;
|
||||
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2700_A1_SILICON_REV;
|
||||
sc->sram_size = AST2700_SSP_RAM_SIZE;
|
||||
sc->spis_num = 0;
|
||||
sc->ehcis_num = 0;
|
||||
sc->wdts_num = 0;
|
||||
sc->macs_num = 0;
|
||||
sc->uarts_num = 13;
|
||||
sc->uarts_base = ASPEED_DEV_UART0;
|
||||
sc->irqmap = aspeed_soc_ast27x0ssp_irqmap;
|
||||
sc->memmap = aspeed_soc_ast27x0ssp_memmap;
|
||||
sc->num_cpus = 1;
|
||||
sc->get_irq = aspeed_soc_ast27x0ssp_get_irq;
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_soc_ast27x0ssp_types[] = {
|
||||
{
|
||||
.name = TYPE_ASPEED27X0SSP_SOC,
|
||||
.parent = TYPE_ASPEED_SOC,
|
||||
.instance_size = sizeof(Aspeed27x0SSPSoCState),
|
||||
.name = TYPE_ASPEED27X0SSP_COPROCESSOR,
|
||||
.parent = TYPE_ASPEED_COPROCESSOR,
|
||||
.instance_size = sizeof(Aspeed27x0CoprocessorState),
|
||||
.instance_init = aspeed_soc_ast27x0ssp_init,
|
||||
.class_init = aspeed_soc_ast27x0ssp_class_init,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* ASPEED Ast27x0 TSP SoC
|
||||
* ASPEED Ast27x0 TSP Coprocessor
|
||||
*
|
||||
* Copyright (C) 2025 ASPEED Technology Inc.
|
||||
*
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
#include "hw/qdev-clock.h"
|
||||
#include "hw/misc/unimp.h"
|
||||
#include "hw/arm/aspeed_soc.h"
|
||||
#include "hw/arm/aspeed_coprocessor.h"
|
||||
|
||||
#define AST2700_TSP_RAM_SIZE (32 * MiB)
|
||||
|
||||
|
|
@ -104,10 +105,11 @@ static struct nvic_intc_irq_info ast2700_tsp_intcmap[] = {
|
|||
{136, 0, 9, NULL},
|
||||
};
|
||||
|
||||
static qemu_irq aspeed_soc_ast27x0tsp_get_irq(AspeedSoCState *s, int dev)
|
||||
static qemu_irq aspeed_soc_ast27x0tsp_get_irq(AspeedCoprocessorState *s,
|
||||
int dev)
|
||||
{
|
||||
Aspeed27x0TSPSoCState *a = ASPEED27X0TSP_SOC(s);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(s);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
|
||||
int or_idx;
|
||||
int idx;
|
||||
|
|
@ -128,9 +130,9 @@ static qemu_irq aspeed_soc_ast27x0tsp_get_irq(AspeedSoCState *s, int dev)
|
|||
|
||||
static void aspeed_soc_ast27x0tsp_init(Object *obj)
|
||||
{
|
||||
Aspeed27x0TSPSoCState *a = ASPEED27X0TSP_SOC(obj);
|
||||
AspeedSoCState *s = ASPEED_SOC(obj);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(obj);
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(obj);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
int i;
|
||||
|
||||
object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M);
|
||||
|
|
@ -159,11 +161,12 @@ static void aspeed_soc_ast27x0tsp_init(Object *obj)
|
|||
|
||||
static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
||||
{
|
||||
Aspeed27x0TSPSoCState *a = ASPEED27X0TSP_SOC(dev_soc);
|
||||
AspeedSoCState *s = ASPEED_SOC(dev_soc);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
Aspeed27x0CoprocessorState *a = ASPEED27X0TSP_COPROCESSOR(dev_soc);
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev_soc);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
|
||||
DeviceState *armv7m;
|
||||
g_autofree char *sram_name = NULL;
|
||||
int uart;
|
||||
int i;
|
||||
|
||||
if (!clock_has_source(s->sysclk)) {
|
||||
|
|
@ -174,7 +177,8 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
/* AST27X0 TSP Core */
|
||||
armv7m = DEVICE(&a->armv7m);
|
||||
qdev_prop_set_uint32(armv7m, "num-irq", 256);
|
||||
qdev_prop_set_string(armv7m, "cpu-type", aspeed_soc_cpu_type(sc));
|
||||
qdev_prop_set_string(armv7m, "cpu-type",
|
||||
aspeed_soc_cpu_type(sc->valid_cpu_types));
|
||||
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
|
||||
object_property_set_link(OBJECT(&a->armv7m), "memory",
|
||||
OBJECT(s->memory), &error_abort);
|
||||
|
|
@ -183,8 +187,8 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
sram_name = g_strdup_printf("aspeed.dram.%d",
|
||||
CPU(a->armv7m.cpu)->cpu_index);
|
||||
|
||||
if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size,
|
||||
errp)) {
|
||||
if (!memory_region_init_ram(&s->sram, OBJECT(s), sram_name,
|
||||
AST2700_TSP_RAM_SIZE, errp)) {
|
||||
return;
|
||||
}
|
||||
memory_region_add_subregion(s->memory,
|
||||
|
|
@ -195,14 +199,15 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
|
||||
/* INTC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&a->intc[0]), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->intc[0]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->intc[0]), 0,
|
||||
sc->memmap[ASPEED_DEV_INTC]);
|
||||
|
||||
/* INTCIO */
|
||||
|
|
@ -210,7 +215,7 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->intc[1]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->intc[1]), 0,
|
||||
sc->memmap[ASPEED_DEV_INTCIO]);
|
||||
|
||||
/* irq source orgates -> INTC */
|
||||
|
|
@ -235,57 +240,56 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
|
|||
qdev_get_gpio_in(DEVICE(&a->intc[0].orgates[0]), i));
|
||||
}
|
||||
/* UART */
|
||||
if (!aspeed_soc_uart_realize(s, errp)) {
|
||||
return;
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast27x0tsp_get_irq(s, uart));
|
||||
}
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->timerctrl),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->timerctrl),
|
||||
"aspeed.timerctrl",
|
||||
sc->memmap[ASPEED_DEV_TIMER1], 0x200);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&a->ipc[0]),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->ipc[0]),
|
||||
"aspeed.ipc0",
|
||||
sc->memmap[ASPEED_DEV_IPC0], 0x1000);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&a->ipc[1]),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->ipc[1]),
|
||||
"aspeed.ipc1",
|
||||
sc->memmap[ASPEED_DEV_IPC1], 0x1000);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&a->scuio),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&a->scuio),
|
||||
"aspeed.scuio",
|
||||
sc->memmap[ASPEED_DEV_SCUIO], 0x1000);
|
||||
}
|
||||
|
||||
static void aspeed_soc_ast27x0tsp_class_init(ObjectClass *klass, const void *data)
|
||||
static void aspeed_soc_ast27x0tsp_class_init(ObjectClass *klass,
|
||||
const void *data)
|
||||
{
|
||||
static const char * const valid_cpu_types[] = {
|
||||
ARM_CPU_TYPE_NAME("cortex-m4"), /* TODO cortex-m4f */
|
||||
NULL
|
||||
};
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedSoCClass *sc = ASPEED_SOC_CLASS(dc);
|
||||
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_CLASS(dc);
|
||||
|
||||
/* Reason: The Aspeed SoC can only be instantiated from a board */
|
||||
/* Reason: The Aspeed Coprocessor can only be instantiated from a board */
|
||||
dc->user_creatable = false;
|
||||
dc->realize = aspeed_soc_ast27x0tsp_realize;
|
||||
|
||||
sc->valid_cpu_types = valid_cpu_types;
|
||||
sc->silicon_rev = AST2700_A1_SILICON_REV;
|
||||
sc->sram_size = AST2700_TSP_RAM_SIZE;
|
||||
sc->spis_num = 0;
|
||||
sc->ehcis_num = 0;
|
||||
sc->wdts_num = 0;
|
||||
sc->macs_num = 0;
|
||||
sc->uarts_num = 13;
|
||||
sc->uarts_base = ASPEED_DEV_UART0;
|
||||
sc->irqmap = aspeed_soc_ast27x0tsp_irqmap;
|
||||
sc->memmap = aspeed_soc_ast27x0tsp_memmap;
|
||||
sc->num_cpus = 1;
|
||||
sc->get_irq = aspeed_soc_ast27x0tsp_get_irq;
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_soc_ast27x0tsp_types[] = {
|
||||
{
|
||||
.name = TYPE_ASPEED27X0TSP_SOC,
|
||||
.parent = TYPE_ASPEED_SOC,
|
||||
.instance_size = sizeof(Aspeed27x0TSPSoCState),
|
||||
.name = TYPE_ASPEED27X0TSP_COPROCESSOR,
|
||||
.parent = TYPE_ASPEED_COPROCESSOR,
|
||||
.instance_size = sizeof(Aspeed27x0CoprocessorState),
|
||||
.instance_init = aspeed_soc_ast27x0tsp_init,
|
||||
.class_init = aspeed_soc_ast27x0tsp_class_init,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -436,7 +436,7 @@ static void aspeed_soc_ast2700_init(Object *obj)
|
|||
|
||||
for (i = 0; i < sc->num_cpus; i++) {
|
||||
object_initialize_child(obj, "cpu[*]", &a->cpu[i],
|
||||
aspeed_soc_cpu_type(sc));
|
||||
aspeed_soc_cpu_type(sc->valid_cpu_types));
|
||||
}
|
||||
|
||||
object_initialize_child(obj, "gic", &a->gic, gicv3_class_name());
|
||||
|
|
@ -589,9 +589,9 @@ static bool aspeed_soc_ast2700_gic_realize(DeviceState *dev, Error **errp)
|
|||
return false;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->gic), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->gic), 0,
|
||||
sc->memmap[ASPEED_GIC_DIST]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->gic), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->gic), 1,
|
||||
sc->memmap[ASPEED_GIC_REDIST]);
|
||||
|
||||
for (i = 0; i < sc->num_cpus; i++) {
|
||||
|
|
@ -647,7 +647,7 @@ static bool aspeed_soc_ast2700_pcie_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->pcie_phy[i]), errp)) {
|
||||
return false;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->pcie_phy[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->pcie_phy[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_PCIE_PHY0 + i]);
|
||||
|
||||
object_property_set_int(OBJECT(&s->pcie[i]), "dram-base",
|
||||
|
|
@ -658,9 +658,9 @@ static bool aspeed_soc_ast2700_pcie_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->pcie[i]), errp)) {
|
||||
return false;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->pcie[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->pcie[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_PCIE0 + i]);
|
||||
irq = aspeed_soc_get_irq(s, ASPEED_DEV_PCIE0 + i);
|
||||
irq = aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_PCIE0 + i);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie[i].rc), 0, irq);
|
||||
|
||||
mmio_mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->pcie[i].rc), 1);
|
||||
|
|
@ -687,6 +687,7 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
AspeedINTCClass *icio = ASPEED_INTC_GET_CLASS(&a->intc[1]);
|
||||
g_autofree char *name = NULL;
|
||||
qemu_irq irq;
|
||||
int uart;
|
||||
|
||||
/* Default boot region (SPI memory or ROMs) */
|
||||
memory_region_init(&s->spi_boot_container, OBJECT(s),
|
||||
|
|
@ -719,7 +720,7 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->intc[0]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->intc[0]), 0,
|
||||
sc->memmap[ASPEED_DEV_INTC]);
|
||||
|
||||
/* INTCIO */
|
||||
|
|
@ -727,7 +728,7 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->intc[1]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&a->intc[1]), 0,
|
||||
sc->memmap[ASPEED_DEV_INTCIO]);
|
||||
|
||||
/* irq sources -> orgates -> INTC */
|
||||
|
|
@ -777,18 +778,24 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0,
|
||||
sc->memmap[ASPEED_DEV_SCU]);
|
||||
|
||||
/* SCU1 */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->scuio), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scuio), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scuio), 0,
|
||||
sc->memmap[ASPEED_DEV_SCUIO]);
|
||||
|
||||
/* UART */
|
||||
if (!aspeed_soc_uart_realize(s, errp)) {
|
||||
return;
|
||||
for (i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
if (!aspeed_soc_uart_realize(s->memory, &s->uart[i],
|
||||
sc->memmap[uart], errp)) {
|
||||
return;
|
||||
}
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
|
||||
aspeed_soc_ast2700_get_irq(s, uart));
|
||||
}
|
||||
|
||||
/* FMC, The number of CS is set at the board level */
|
||||
|
|
@ -800,11 +807,12 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->fmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 0, sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
sc->memmap[ASPEED_DEV_FMC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->fmc)->flash_window_base);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_FMC));
|
||||
|
||||
/* Set up an alias on the FMC CE0 region (boot default) */
|
||||
MemoryRegion *fmc0_mmio = &s->fmc.flashes[0].mmio;
|
||||
|
|
@ -819,9 +827,9 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->spi[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_SPI0 + i]);
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
|
||||
}
|
||||
|
||||
|
|
@ -830,10 +838,11 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ehci[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_EHCI1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ehci[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_EHCI1 + i));
|
||||
aspeed_soc_ast2700_get_irq(s,
|
||||
ASPEED_DEV_EHCI1 + i));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -848,7 +857,7 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sdmc), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sdmc), 0,
|
||||
sc->memmap[ASPEED_DEV_SDMC]);
|
||||
|
||||
/* RAM */
|
||||
|
|
@ -865,10 +874,10 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ftgmac100[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_ETH1 + i]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ftgmac100[i]), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ETH1 + i));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_ETH1 + i));
|
||||
|
||||
object_property_set_link(OBJECT(&s->mii[i]), "nic",
|
||||
OBJECT(&s->ftgmac100[i]), &error_abort);
|
||||
|
|
@ -876,7 +885,7 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->mii[i]), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->mii[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_MII1 + i]);
|
||||
}
|
||||
|
||||
|
|
@ -890,28 +899,30 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->wdt[i]), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->wdt[i]), 0, wdt_offset);
|
||||
}
|
||||
|
||||
/* SLI */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sli), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sli), 0, sc->memmap[ASPEED_DEV_SLI]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sli), 0,
|
||||
sc->memmap[ASPEED_DEV_SLI]);
|
||||
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sliio), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sliio), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sliio), 0,
|
||||
sc->memmap[ASPEED_DEV_SLIIO]);
|
||||
|
||||
/* ADC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->adc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->adc), 0, sc->memmap[ASPEED_DEV_ADC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->adc), 0,
|
||||
sc->memmap[ASPEED_DEV_ADC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_ADC));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_ADC));
|
||||
|
||||
/* I2C */
|
||||
object_property_set_link(OBJECT(&s->i2c), "dram", OBJECT(s->dram_mr),
|
||||
|
|
@ -919,7 +930,8 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->i2c), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i2c), 0, sc->memmap[ASPEED_DEV_I2C]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->i2c), 0,
|
||||
sc->memmap[ASPEED_DEV_I2C]);
|
||||
for (i = 0; i < ASPEED_I2C_GET_CLASS(&s->i2c)->num_busses; i++) {
|
||||
/*
|
||||
* The AST2700 I2C controller has one source INTC per bus.
|
||||
|
|
@ -948,36 +960,37 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
sc->memmap[ASPEED_DEV_GPIO]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_GPIO));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_GPIO));
|
||||
|
||||
/* RTC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->rtc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->rtc), 0, sc->memmap[ASPEED_DEV_RTC]);
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->rtc), 0,
|
||||
sc->memmap[ASPEED_DEV_RTC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->rtc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_RTC));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_RTC));
|
||||
|
||||
/* SDHCI */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdhci), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
sc->memmap[ASPEED_DEV_SDHCI]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_SDHCI));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_SDHCI));
|
||||
|
||||
/* eMMC */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->emmc), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->emmc), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->emmc), 0,
|
||||
sc->memmap[ASPEED_DEV_EMMC]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->emmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_EMMC));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_EMMC));
|
||||
|
||||
/* Timer */
|
||||
object_property_set_link(OBJECT(&s->timerctrl), "scu", OBJECT(&s->scu),
|
||||
|
|
@ -985,10 +998,10 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->timerctrl), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->timerctrl), 0,
|
||||
sc->memmap[ASPEED_DEV_TIMER1]);
|
||||
for (i = 0; i < ASPEED_TIMER_NR_TIMERS; i++) {
|
||||
irq = aspeed_soc_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
irq = aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_TIMER1 + i);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->timerctrl), i, irq);
|
||||
}
|
||||
|
||||
|
|
@ -998,33 +1011,33 @@ static void aspeed_soc_ast2700_realize(DeviceState *dev, Error **errp)
|
|||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->hace), errp)) {
|
||||
return;
|
||||
}
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->hace), 0,
|
||||
sc->memmap[ASPEED_DEV_HACE]);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->hace), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_HACE));
|
||||
aspeed_soc_ast2700_get_irq(s, ASPEED_DEV_HACE));
|
||||
|
||||
/* PCIe Root Complex (RC) */
|
||||
if (!aspeed_soc_ast2700_pcie_realize(dev, errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->dpmcu),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->dpmcu),
|
||||
"aspeed.dpmcu",
|
||||
sc->memmap[ASPEED_DEV_DPMCU],
|
||||
AST2700_SOC_DPMCU_SIZE);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->ltpi),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->ltpi),
|
||||
"aspeed.ltpi",
|
||||
sc->memmap[ASPEED_DEV_LTPI],
|
||||
AST2700_SOC_LTPI_SIZE);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->iomem),
|
||||
"aspeed.io",
|
||||
sc->memmap[ASPEED_DEV_IOMEM],
|
||||
AST2700_SOC_IO_SIZE);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem0),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->iomem0),
|
||||
"aspeed.iomem0",
|
||||
sc->memmap[ASPEED_DEV_IOMEM0],
|
||||
AST2700_SOC_IOMEM_SIZE);
|
||||
aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->iomem1),
|
||||
aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->iomem1),
|
||||
"aspeed.iomem1",
|
||||
sc->memmap[ASPEED_DEV_IOMEM1],
|
||||
AST2700_SOC_IOMEM_SIZE);
|
||||
|
|
@ -1056,7 +1069,6 @@ static void aspeed_soc_ast2700a0_class_init(ObjectClass *oc, const void *data)
|
|||
sc->uarts_base = ASPEED_DEV_UART0;
|
||||
sc->irqmap = aspeed_soc_ast2700a0_irqmap;
|
||||
sc->memmap = aspeed_soc_ast2700_memmap;
|
||||
sc->get_irq = aspeed_soc_ast2700_get_irq;
|
||||
}
|
||||
|
||||
static void aspeed_soc_ast2700a1_class_init(ObjectClass *oc, const void *data)
|
||||
|
|
@ -1085,7 +1097,6 @@ static void aspeed_soc_ast2700a1_class_init(ObjectClass *oc, const void *data)
|
|||
sc->uarts_base = ASPEED_DEV_UART0;
|
||||
sc->irqmap = aspeed_soc_ast2700a1_irqmap;
|
||||
sc->memmap = aspeed_soc_ast2700_memmap;
|
||||
sc->get_irq = aspeed_soc_ast2700_get_irq;
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_soc_ast27x0_types[] = {
|
||||
|
|
|
|||
49
hw/arm/aspeed_coprocessor_common.c
Normal file
49
hw/arm/aspeed_coprocessor_common.c
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* ASPEED Coprocessor
|
||||
*
|
||||
* Copyright (C) 2025 ASPEED Technology Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "system/memory.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/arm/aspeed_coprocessor.h"
|
||||
|
||||
static void aspeed_coprocessor_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev);
|
||||
|
||||
if (!s->memory) {
|
||||
error_setg(errp, "'memory' link is not set");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static const Property aspeed_coprocessor_properties[] = {
|
||||
DEFINE_PROP_LINK("memory", AspeedCoprocessorState, memory,
|
||||
TYPE_MEMORY_REGION, MemoryRegion *),
|
||||
};
|
||||
|
||||
static void aspeed_coprocessor_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
dc->realize = aspeed_coprocessor_realize;
|
||||
device_class_set_props(dc, aspeed_coprocessor_properties);
|
||||
}
|
||||
|
||||
static const TypeInfo aspeed_coprocessor_types[] = {
|
||||
{
|
||||
.name = TYPE_ASPEED_COPROCESSOR,
|
||||
.parent = TYPE_DEVICE,
|
||||
.instance_size = sizeof(AspeedCoprocessorState),
|
||||
.class_size = sizeof(AspeedCoprocessorClass),
|
||||
.class_init = aspeed_coprocessor_class_init,
|
||||
.abstract = true,
|
||||
},
|
||||
};
|
||||
|
||||
DEFINE_TYPES(aspeed_coprocessor_types)
|
||||
|
|
@ -22,52 +22,39 @@
|
|||
#include "qemu/datadir.h"
|
||||
|
||||
|
||||
const char *aspeed_soc_cpu_type(AspeedSoCClass *sc)
|
||||
const char *aspeed_soc_cpu_type(const char * const *valid_cpu_types)
|
||||
{
|
||||
assert(sc->valid_cpu_types);
|
||||
assert(sc->valid_cpu_types[0]);
|
||||
assert(!sc->valid_cpu_types[1]);
|
||||
return sc->valid_cpu_types[0];
|
||||
assert(valid_cpu_types);
|
||||
assert(valid_cpu_types[0]);
|
||||
assert(!valid_cpu_types[1]);
|
||||
return valid_cpu_types[0];
|
||||
}
|
||||
|
||||
qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev)
|
||||
bool aspeed_soc_uart_realize(MemoryRegion *memory, SerialMM *smm,
|
||||
const hwaddr addr, Error **errp)
|
||||
{
|
||||
return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev);
|
||||
}
|
||||
|
||||
bool aspeed_soc_uart_realize(AspeedSoCState *s, Error **errp)
|
||||
{
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
SerialMM *smm;
|
||||
|
||||
for (int i = 0, uart = sc->uarts_base; i < sc->uarts_num; i++, uart++) {
|
||||
smm = &s->uart[i];
|
||||
|
||||
/* Chardev property is set by the machine. */
|
||||
qdev_prop_set_uint8(DEVICE(smm), "regshift", 2);
|
||||
qdev_prop_set_uint32(DEVICE(smm), "baudbase", 38400);
|
||||
qdev_set_legacy_instance_id(DEVICE(smm), sc->memmap[uart], 2);
|
||||
qdev_prop_set_uint8(DEVICE(smm), "endianness", DEVICE_LITTLE_ENDIAN);
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(smm), errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(smm), 0, aspeed_soc_get_irq(s, uart));
|
||||
aspeed_mmio_map(s, SYS_BUS_DEVICE(smm), 0, sc->memmap[uart]);
|
||||
/* Chardev property is set by the machine. */
|
||||
qdev_prop_set_uint8(DEVICE(smm), "regshift", 2);
|
||||
qdev_prop_set_uint32(DEVICE(smm), "baudbase", 38400);
|
||||
qdev_set_legacy_instance_id(DEVICE(smm), addr, 2);
|
||||
qdev_prop_set_uint8(DEVICE(smm), "endianness", DEVICE_LITTLE_ENDIAN);
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(smm), errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aspeed_mmio_map(memory, SYS_BUS_DEVICE(smm), 0, addr);
|
||||
return true;
|
||||
}
|
||||
|
||||
void aspeed_soc_uart_set_chr(AspeedSoCState *s, int dev, Chardev *chr)
|
||||
void aspeed_soc_uart_set_chr(SerialMM *uart, int dev, int uarts_base,
|
||||
int uarts_num, Chardev *chr)
|
||||
{
|
||||
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
|
||||
int uart_first = aspeed_uart_first(sc);
|
||||
int uart_first = aspeed_uart_first(uarts_base);
|
||||
int uart_index = aspeed_uart_index(dev);
|
||||
int i = uart_index - uart_first;
|
||||
|
||||
g_assert(0 <= i && i < ARRAY_SIZE(s->uart) && i < sc->uarts_num);
|
||||
qdev_prop_set_chr(DEVICE(&s->uart[i]), "chardev", chr);
|
||||
g_assert(0 <= i && i < ASPEED_UARTS_NUM && i < uarts_num);
|
||||
qdev_prop_set_chr(DEVICE(&uart[i]), "chardev", chr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -111,20 +98,20 @@ bool aspeed_soc_dram_init(AspeedSoCState *s, Error **errp)
|
|||
return true;
|
||||
}
|
||||
|
||||
void aspeed_mmio_map(AspeedSoCState *s, SysBusDevice *dev, int n, hwaddr addr)
|
||||
void aspeed_mmio_map(MemoryRegion *memory, SysBusDevice *dev, int n,
|
||||
hwaddr addr)
|
||||
{
|
||||
memory_region_add_subregion(s->memory, addr,
|
||||
sysbus_mmio_get_region(dev, n));
|
||||
memory_region_add_subregion(memory, addr, sysbus_mmio_get_region(dev, n));
|
||||
}
|
||||
|
||||
void aspeed_mmio_map_unimplemented(AspeedSoCState *s, SysBusDevice *dev,
|
||||
void aspeed_mmio_map_unimplemented(MemoryRegion *memory, SysBusDevice *dev,
|
||||
const char *name, hwaddr addr, uint64_t size)
|
||||
{
|
||||
qdev_prop_set_string(DEVICE(dev), "name", name);
|
||||
qdev_prop_set_uint64(DEVICE(dev), "size", size);
|
||||
sysbus_realize(dev, &error_abort);
|
||||
|
||||
memory_region_add_subregion_overlap(s->memory, addr,
|
||||
memory_region_add_subregion_overlap(memory, addr,
|
||||
sysbus_mmio_get_region(dev, 0), -1000);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,9 +71,11 @@ static void fby35_bmc_write_boot_rom(DriveInfo *dinfo, MemoryRegion *mr,
|
|||
static void fby35_bmc_init(Fby35State *s)
|
||||
{
|
||||
AspeedSoCState *soc;
|
||||
AspeedSoCClass *sc;
|
||||
|
||||
object_initialize_child(OBJECT(s), "bmc", &s->bmc, "ast2600-a3");
|
||||
soc = ASPEED_SOC(&s->bmc);
|
||||
sc = ASPEED_SOC_GET_CLASS(soc);
|
||||
|
||||
memory_region_init(&s->bmc_memory, OBJECT(&s->bmc), "bmc-memory",
|
||||
UINT64_MAX);
|
||||
|
|
@ -91,7 +93,8 @@ static void fby35_bmc_init(Fby35State *s)
|
|||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->bmc), "hw-strap2", 0x00000003,
|
||||
&error_abort);
|
||||
aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART5, serial_hd(0));
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART5, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(0));
|
||||
qdev_realize(DEVICE(&s->bmc), NULL, &error_abort);
|
||||
|
||||
aspeed_board_init_flashes(&soc->fmc, "n25q00", 2, 0);
|
||||
|
|
@ -118,12 +121,14 @@ static void fby35_bmc_init(Fby35State *s)
|
|||
static void fby35_bic_init(Fby35State *s)
|
||||
{
|
||||
AspeedSoCState *soc;
|
||||
AspeedSoCClass *sc;
|
||||
|
||||
s->bic_sysclk = clock_new(OBJECT(s), "SYSCLK");
|
||||
clock_set_hz(s->bic_sysclk, 200000000ULL);
|
||||
|
||||
object_initialize_child(OBJECT(s), "bic", &s->bic, "ast1030-a1");
|
||||
soc = ASPEED_SOC(&s->bic);
|
||||
sc = ASPEED_SOC_GET_CLASS(soc);
|
||||
|
||||
memory_region_init(&s->bic_memory, OBJECT(&s->bic), "bic-memory",
|
||||
UINT64_MAX);
|
||||
|
|
@ -131,7 +136,8 @@ static void fby35_bic_init(Fby35State *s)
|
|||
qdev_connect_clock_in(DEVICE(&s->bic), "sysclk", s->bic_sysclk);
|
||||
object_property_set_link(OBJECT(&s->bic), "memory", OBJECT(&s->bic_memory),
|
||||
&error_abort);
|
||||
aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART5, serial_hd(1));
|
||||
aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART5, sc->uarts_base,
|
||||
sc->uarts_num, serial_hd(1));
|
||||
qdev_realize(DEVICE(&s->bic), NULL, &error_abort);
|
||||
|
||||
aspeed_board_init_flashes(&soc->fmc, "sst25vf032b", 2, 2);
|
||||
|
|
|
|||
|
|
@ -45,14 +45,15 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
|
|||
'aspeed_soc_common.c',
|
||||
'aspeed_ast2400.c',
|
||||
'aspeed_ast2600.c',
|
||||
'aspeed_ast27x0-ssp.c',
|
||||
'aspeed_ast27x0-tsp.c',
|
||||
'aspeed_ast10x0.c',
|
||||
'aspeed_eeprom.c',
|
||||
'fby35.c'))
|
||||
arm_common_ss.add(when: ['CONFIG_ASPEED_SOC', 'TARGET_AARCH64'], if_true: files(
|
||||
'aspeed_ast27x0.c',
|
||||
'aspeed_ast27x0-fc.c',))
|
||||
'aspeed_ast27x0-fc.c',
|
||||
'aspeed_ast27x0-ssp.c',
|
||||
'aspeed_ast27x0-tsp.c',
|
||||
'aspeed_coprocessor_common.c'))
|
||||
arm_common_ss.add(when: 'CONFIG_MPS2', if_true: files('mps2.c'))
|
||||
arm_common_ss.add(when: 'CONFIG_MPS2', if_true: files('mps2-tz.c'))
|
||||
arm_common_ss.add(when: 'CONFIG_MSF2', if_true: files('msf2-soc.c'))
|
||||
|
|
|
|||
61
include/hw/arm/aspeed_coprocessor.h
Normal file
61
include/hw/arm/aspeed_coprocessor.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* ASPEED Coprocessor
|
||||
*
|
||||
* Copyright (C) 2025 ASPEED Technology Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef ASPEED_COPROCESSOR_H
|
||||
#define ASPEED_COPROCESSOR_H
|
||||
|
||||
#include "qom/object.h"
|
||||
#include "hw/arm/aspeed_soc.h"
|
||||
|
||||
struct AspeedCoprocessorState {
|
||||
DeviceState parent;
|
||||
|
||||
MemoryRegion *memory;
|
||||
MemoryRegion sram;
|
||||
Clock *sysclk;
|
||||
|
||||
AspeedSCUState scu;
|
||||
AspeedSCUState scuio;
|
||||
AspeedTimerCtrlState timerctrl;
|
||||
SerialMM uart[ASPEED_UARTS_NUM];
|
||||
};
|
||||
|
||||
#define TYPE_ASPEED_COPROCESSOR "aspeed-coprocessor"
|
||||
OBJECT_DECLARE_TYPE(AspeedCoprocessorState, AspeedCoprocessorClass,
|
||||
ASPEED_COPROCESSOR)
|
||||
|
||||
struct AspeedCoprocessorClass {
|
||||
DeviceClass parent_class;
|
||||
|
||||
/** valid_cpu_types: NULL terminated array of a single CPU type. */
|
||||
const char * const *valid_cpu_types;
|
||||
uint32_t silicon_rev;
|
||||
const hwaddr *memmap;
|
||||
const int *irqmap;
|
||||
int uarts_base;
|
||||
int uarts_num;
|
||||
};
|
||||
|
||||
struct Aspeed27x0CoprocessorState {
|
||||
AspeedCoprocessorState parent;
|
||||
AspeedINTCState intc[2];
|
||||
UnimplementedDeviceState ipc[2];
|
||||
UnimplementedDeviceState scuio;
|
||||
|
||||
ARMv7MState armv7m;
|
||||
};
|
||||
|
||||
#define TYPE_ASPEED27X0SSP_COPROCESSOR "aspeed27x0ssp-coprocessor"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(Aspeed27x0CoprocessorState,
|
||||
ASPEED27X0SSP_COPROCESSOR)
|
||||
|
||||
#define TYPE_ASPEED27X0TSP_COPROCESSOR "aspeed27x0tsp-coprocessor"
|
||||
DECLARE_OBJ_CHECKERS(Aspeed27x0CoprocessorState, AspeedCoprocessorClass,
|
||||
ASPEED27X0TSP_COPROCESSOR, TYPE_ASPEED27X0TSP_COPROCESSOR)
|
||||
|
||||
#endif /* ASPEED_COPROCESSOR_H */
|
||||
|
|
@ -153,30 +153,6 @@ struct Aspeed10x0SoCState {
|
|||
ARMv7MState armv7m;
|
||||
};
|
||||
|
||||
struct Aspeed27x0SSPSoCState {
|
||||
AspeedSoCState parent;
|
||||
AspeedINTCState intc[2];
|
||||
UnimplementedDeviceState ipc[2];
|
||||
UnimplementedDeviceState scuio;
|
||||
|
||||
ARMv7MState armv7m;
|
||||
};
|
||||
|
||||
#define TYPE_ASPEED27X0SSP_SOC "aspeed27x0ssp-soc"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(Aspeed27x0SSPSoCState, ASPEED27X0SSP_SOC)
|
||||
|
||||
struct Aspeed27x0TSPSoCState {
|
||||
AspeedSoCState parent;
|
||||
AspeedINTCState intc[2];
|
||||
UnimplementedDeviceState ipc[2];
|
||||
UnimplementedDeviceState scuio;
|
||||
|
||||
ARMv7MState armv7m;
|
||||
};
|
||||
|
||||
#define TYPE_ASPEED27X0TSP_SOC "aspeed27x0tsp-soc"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(Aspeed27x0TSPSoCState, ASPEED27X0TSP_SOC)
|
||||
|
||||
#define TYPE_ASPEED10X0_SOC "aspeed10x0-soc"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(Aspeed10x0SoCState, ASPEED10X0_SOC)
|
||||
|
||||
|
|
@ -198,12 +174,9 @@ struct AspeedSoCClass {
|
|||
const int *irqmap;
|
||||
const hwaddr *memmap;
|
||||
uint32_t num_cpus;
|
||||
qemu_irq (*get_irq)(AspeedSoCState *s, int dev);
|
||||
bool (*boot_from_emmc)(AspeedSoCState *s);
|
||||
};
|
||||
|
||||
const char *aspeed_soc_cpu_type(AspeedSoCClass *sc);
|
||||
|
||||
enum {
|
||||
ASPEED_DEV_VBOOTROM,
|
||||
ASPEED_DEV_SPI_BOOT,
|
||||
|
|
@ -304,12 +277,15 @@ enum {
|
|||
ASPEED_DEV_IPC1,
|
||||
};
|
||||
|
||||
qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev);
|
||||
bool aspeed_soc_uart_realize(AspeedSoCState *s, Error **errp);
|
||||
void aspeed_soc_uart_set_chr(AspeedSoCState *s, int dev, Chardev *chr);
|
||||
const char *aspeed_soc_cpu_type(const char * const *valid_cpu_types);
|
||||
bool aspeed_soc_uart_realize(MemoryRegion *memory, SerialMM *smm,
|
||||
const hwaddr addr, Error **errp);
|
||||
void aspeed_soc_uart_set_chr(SerialMM *uart, int dev, int uarts_base,
|
||||
int uarts_num, Chardev *chr);
|
||||
bool aspeed_soc_dram_init(AspeedSoCState *s, Error **errp);
|
||||
void aspeed_mmio_map(AspeedSoCState *s, SysBusDevice *dev, int n, hwaddr addr);
|
||||
void aspeed_mmio_map_unimplemented(AspeedSoCState *s, SysBusDevice *dev,
|
||||
void aspeed_mmio_map(MemoryRegion *memory, SysBusDevice *dev, int n,
|
||||
hwaddr addr);
|
||||
void aspeed_mmio_map_unimplemented(MemoryRegion *memory, SysBusDevice *dev,
|
||||
const char *name, hwaddr addr,
|
||||
uint64_t size);
|
||||
void aspeed_board_init_flashes(AspeedSMCState *s, const char *flashtype,
|
||||
|
|
@ -326,14 +302,14 @@ static inline int aspeed_uart_index(int uart_dev)
|
|||
return uart_dev - ASPEED_DEV_UART0;
|
||||
}
|
||||
|
||||
static inline int aspeed_uart_first(AspeedSoCClass *sc)
|
||||
static inline int aspeed_uart_first(int uarts_base)
|
||||
{
|
||||
return aspeed_uart_index(sc->uarts_base);
|
||||
return aspeed_uart_index(uarts_base);
|
||||
}
|
||||
|
||||
static inline int aspeed_uart_last(AspeedSoCClass *sc)
|
||||
static inline int aspeed_uart_last(int uarts_base, int uarts_num)
|
||||
{
|
||||
return aspeed_uart_first(sc) + sc->uarts_num - 1;
|
||||
return aspeed_uart_first(uarts_base) + uarts_num - 1;
|
||||
}
|
||||
|
||||
#endif /* ASPEED_SOC_H */
|
||||
|
|
|
|||
|
|
@ -37,26 +37,21 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
wait_for_console_pattern(self, 'done')
|
||||
wait_for_console_pattern(self, 'Jumping to BL31 (Trusted Firmware-A)')
|
||||
|
||||
def verify_openbmc_boot_and_login(self, name):
|
||||
def verify_openbmc_boot_start(self):
|
||||
wait_for_console_pattern(self, 'U-Boot 2023.10')
|
||||
wait_for_console_pattern(self, '## Loading kernel from FIT Image')
|
||||
wait_for_console_pattern(self, 'Starting kernel ...')
|
||||
wait_for_console_pattern(self, 'Linux version ')
|
||||
|
||||
def verify_openbmc_boot_and_login(self, name):
|
||||
self.verify_openbmc_boot_start()
|
||||
|
||||
wait_for_console_pattern(self, f'{name} login:')
|
||||
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
|
||||
exec_command_and_wait_for_pattern(self, '0penBmc', f'root@{name}:~#')
|
||||
|
||||
ASSET_SDK_V906_AST2700 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.06/ast2700-a0-default-obmc.tar.gz',
|
||||
'7247b6f19dbfb700686f8d9f723ac23f3eb229226c0589cb9b06b80d1b61f3cb')
|
||||
|
||||
ASSET_SDK_V906_AST2700A1 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.06/ast2700-default-obmc.tar.gz',
|
||||
'f1d53e0be8a404ecce3e105f72bc50fa4e090ad13160ffa91b10a6e0233a9dc6')
|
||||
|
||||
ASSET_SDK_V907_AST2700A1_VBOOROM = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.07/ast2700-default-obmc.tar.gz',
|
||||
'6e9e0c4b13e0f26040eca3f4a7f17cf09fc0f5c37c820500ff79370cc3c44add')
|
||||
ASSET_SDK_V908_AST2700A1 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.08/ast2700-default-obmc.tar.gz',
|
||||
'eac3dc409b7ea3cd4b03d4792d3cebd469792ad893cb51e1d15f0fc20bd1e2cd')
|
||||
|
||||
def do_ast2700_i2c_test(self):
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
|
|
@ -69,6 +64,19 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/bus/i2c/devices/1-004d/hwmon/hwmon*/temp1_input', '18000')
|
||||
|
||||
def do_ast2700_pcie_test(self):
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 0002:00:00.0',
|
||||
'0002:00:00.0 PCI bridge: '
|
||||
'ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 0002:01:00.0',
|
||||
'0002:01:00.0 Ethernet controller: '
|
||||
'Intel Corporation 82574L Gigabit Network Connection')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'ip addr show dev eth2',
|
||||
'inet 10.0.2.15/24')
|
||||
|
||||
def start_ast2700_test(self, name):
|
||||
num_cpu = 4
|
||||
uboot_size = os.path.getsize(self.scratch_file(name,
|
||||
|
|
@ -115,30 +123,28 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
self.do_test_aarch64_aspeed_sdk_start(
|
||||
self.scratch_file(name, 'image-bmc'))
|
||||
|
||||
def test_aarch64_ast2700a0_evb_sdk_v09_06(self):
|
||||
self.set_machine('ast2700a0-evb')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V906_AST2700)
|
||||
self.start_ast2700_test('ast2700-a0-default')
|
||||
self.verify_openbmc_boot_and_login('ast2700-a0-default')
|
||||
self.do_ast2700_i2c_test()
|
||||
|
||||
def test_aarch64_ast2700a1_evb_sdk_v09_06(self):
|
||||
def test_aarch64_ast2700a1_evb_sdk_v09_08(self):
|
||||
self.set_machine('ast2700a1-evb')
|
||||
self.require_netdev('user')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V906_AST2700A1)
|
||||
self.archive_extract(self.ASSET_SDK_V908_AST2700A1)
|
||||
self.vm.add_args('-device', 'e1000e,netdev=net1,bus=pcie.2')
|
||||
self.vm.add_args('-netdev', 'user,id=net1')
|
||||
self.start_ast2700_test('ast2700-default')
|
||||
self.verify_openbmc_boot_and_login('ast2700-default')
|
||||
self.do_ast2700_i2c_test()
|
||||
self.do_ast2700_pcie_test()
|
||||
|
||||
def test_aarch64_ast2700a1_evb_sdk_vbootrom_v09_07(self):
|
||||
def test_aarch64_ast2700a1_evb_sdk_vbootrom_v09_08(self):
|
||||
self.set_machine('ast2700a1-evb')
|
||||
self.require_netdev('user')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V907_AST2700A1_VBOOROM)
|
||||
self.archive_extract(self.ASSET_SDK_V908_AST2700A1)
|
||||
self.vm.add_args('-device', 'e1000e,netdev=net1,bus=pcie.2')
|
||||
self.vm.add_args('-netdev', 'user,id=net1')
|
||||
self.start_ast2700_test_vbootrom('ast2700-default')
|
||||
self.verify_vbootrom_firmware_flow()
|
||||
self.verify_openbmc_boot_and_login('ast2700-default')
|
||||
self.do_ast2700_i2c_test()
|
||||
self.verify_openbmc_boot_start()
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
self.vm.set_console()
|
||||
self.vm.add_args('-device',
|
||||
'tmp105,bus=aspeed.i2c.bus.1,address=0x4d,id=tmp-test')
|
||||
self.vm.add_args('-device', 'e1000e,netdev=net1,bus=pcie.2')
|
||||
self.vm.add_args('-netdev', 'user,id=net1')
|
||||
self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw',
|
||||
'-net', 'nic', '-net', 'user', '-snapshot')
|
||||
|
||||
|
|
@ -49,6 +51,16 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/bus/i2c/devices/1-004d/hwmon/hwmon*/temp1_input', '18000')
|
||||
|
||||
def do_ast2700_pcie_test(self):
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 0002:00:00.0',
|
||||
'0002:00:00.0 PCI bridge: '
|
||||
'ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 0002:01:00.0',
|
||||
'0002:01:00.0 Ethernet controller: '
|
||||
'Intel Corporation 82574L Gigabit Network Connection')
|
||||
|
||||
def do_ast2700fc_ssp_test(self):
|
||||
self.vm.shutdown()
|
||||
self.vm.set_console(console_index=1)
|
||||
|
|
@ -128,6 +140,7 @@ class AST2x00MachineSDK(QemuSystemTest):
|
|||
self.start_ast2700fc_test('ast2700-default')
|
||||
self.verify_openbmc_boot_and_login('ast2700-default')
|
||||
self.do_ast2700_i2c_test()
|
||||
self.do_ast2700_pcie_test()
|
||||
self.do_ast2700fc_ssp_test()
|
||||
self.do_ast2700fc_tsp_test()
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ test_arm_timeouts = {
|
|||
'aspeed_romulus' : 120,
|
||||
'aspeed_witherspoon' : 120,
|
||||
'aspeed_ast2500' : 720,
|
||||
'aspeed_ast2600' : 1200,
|
||||
'aspeed_ast2600_buildroot' : 720,
|
||||
'aspeed_ast2600_sdk' : 1200,
|
||||
'aspeed_bletchley' : 480,
|
||||
'aspeed_catalina' : 480,
|
||||
'aspeed_gb200nvl_bmc' : 480,
|
||||
|
|
@ -31,7 +32,8 @@ tests_arm_system_thorough = [
|
|||
'aspeed_romulus',
|
||||
'aspeed_witherspoon',
|
||||
'aspeed_ast2500',
|
||||
'aspeed_ast2600',
|
||||
'aspeed_ast2600_buildroot',
|
||||
'aspeed_ast2600_sdk',
|
||||
'aspeed_bletchley',
|
||||
'aspeed_catalina',
|
||||
'aspeed_gb200nvl_bmc',
|
||||
|
|
|
|||
|
|
@ -13,17 +13,17 @@ from qemu_test import exec_command_and_wait_for_pattern
|
|||
|
||||
class AST1030Machine(AspeedTest):
|
||||
|
||||
ASSET_ZEPHYR_3_02 = Asset(
|
||||
ASSET_ZEPHYR_3_03 = Asset(
|
||||
('https://github.com/AspeedTech-BMC'
|
||||
'/zephyr/releases/download/v00.03.02/ast1030-evb-demo.zip'),
|
||||
'1ec83caab3ddd5d09481772801be7210e222cb015ce22ec6fffb8a76956dcd4f')
|
||||
'/zephyr/releases/download/v00.03.03/ast1030-evb-demo.zip'),
|
||||
'27cd73cdee6374bceb4ee58b3ace87989fa3f0684f4e612510804b588b24d4e0')
|
||||
|
||||
def test_arm_ast1030_zephyros_3_02(self):
|
||||
def test_arm_ast1030_zephyros_3_03(self):
|
||||
self.set_machine('ast1030-evb')
|
||||
|
||||
kernel_name = "ast1030-evb-demo-3/zephyr.elf"
|
||||
kernel_name = "ast1030-evb-demo/zephyr.elf"
|
||||
kernel_file = self.archive_extract(
|
||||
self.ASSET_ZEPHYR_3_02, member=kernel_name)
|
||||
self.ASSET_ZEPHYR_3_03, member=kernel_name)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-kernel', kernel_file, '-nographic')
|
||||
|
|
@ -72,8 +72,9 @@ class AST1030Machine(AspeedTest):
|
|||
def test_arm_ast1030_otp_blockdev_device(self):
|
||||
self.vm.set_machine("ast1030-evb")
|
||||
|
||||
kernel_name = "ast1030-evb-demo-3/zephyr.elf"
|
||||
kernel_file = self.archive_extract(self.ASSET_ZEPHYR_3_02, member=kernel_name)
|
||||
kernel_name = "ast1030-evb-demo/zephyr.elf"
|
||||
kernel_file = self.archive_extract(self.ASSET_ZEPHYR_3_03,
|
||||
member=kernel_name)
|
||||
otp_img = self.generate_otpmem_image()
|
||||
|
||||
self.vm.set_console()
|
||||
|
|
|
|||
|
|
@ -37,14 +37,14 @@ class AST2500Machine(AspeedTest):
|
|||
|
||||
self.do_test_arm_aspeed_buildroot_poweroff()
|
||||
|
||||
ASSET_SDK_V907_AST2500 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.07/ast2500-default-obmc.tar.gz',
|
||||
'd52bcc279a37c8d7679b3e4ef22cc77c36f0f6624c687b37334f798828afb077')
|
||||
ASSET_SDK_V908_AST2500 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.08/ast2500-default-obmc.tar.gz',
|
||||
'c0a2ba169efd19be5eb77c50ec2a6afd9d826e196a0be3432f969fc72d4b7c0e')
|
||||
|
||||
def test_arm_ast2500_evb_sdk(self):
|
||||
self.set_machine('ast2500-evb')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V907_AST2500)
|
||||
self.archive_extract(self.ASSET_SDK_V908_AST2500)
|
||||
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.scratch_file("ast2500-default", "image-bmc"))
|
||||
|
|
|
|||
|
|
@ -97,80 +97,6 @@ class AST2600Machine(AspeedTest):
|
|||
|
||||
self.do_test_arm_aspeed_buildroot_poweroff()
|
||||
|
||||
ASSET_SDK_V907_AST2600 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.07/ast2600-default-obmc.tar.gz',
|
||||
'cb6c08595bcbba1672ce716b068ba4e48eda1ed9abe78a07b30392ba2278feba')
|
||||
|
||||
def do_ast2600_pcie_test(self):
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 80:00.0',
|
||||
'80:00.0 Host bridge: '
|
||||
'ASPEED Technology, Inc. Device 2600')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 80:08.0',
|
||||
'80:08.0 PCI bridge: '
|
||||
'ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 81:00.0',
|
||||
'81:00.0 Ethernet controller: '
|
||||
'Intel Corporation 82574L Gigabit Network Connection')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'ip addr show dev eth4',
|
||||
'inet 10.0.2.15/24')
|
||||
|
||||
def test_arm_ast2600_evb_sdk(self):
|
||||
self.set_machine('ast2600-evb')
|
||||
self.require_netdev('user')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V907_AST2600)
|
||||
|
||||
self.vm.add_args('-device',
|
||||
'tmp105,bus=aspeed.i2c.bus.5,address=0x4d,id=tmp-test')
|
||||
self.vm.add_args('-device',
|
||||
'ds1338,bus=aspeed.i2c.bus.5,address=0x32')
|
||||
self.vm.add_args('-device', 'e1000e,netdev=net1,bus=pcie.0')
|
||||
self.vm.add_args('-netdev', 'user,id=net1')
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.scratch_file("ast2600-default", "image-bmc"))
|
||||
|
||||
self.wait_for_console_pattern('ast2600-default login:')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
|
||||
exec_command_and_wait_for_pattern(self, '0penBmc',
|
||||
'root@ast2600-default:~#')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo lm75 0x4d > /sys/class/i2c-dev/i2c-5/device/new_device',
|
||||
'i2c i2c-5: new_device: Instantiated device lm75 at 0x4d')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/class/hwmon/hwmon19/temp1_input', '0')
|
||||
self.vm.cmd('qom-set', path='/machine/peripheral/tmp-test',
|
||||
property='temperature', value=18000)
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/class/hwmon/hwmon19/temp1_input', '18000')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo ds1307 0x32 > /sys/class/i2c-dev/i2c-5/device/new_device',
|
||||
'i2c i2c-5: new_device: Instantiated device ds1307 at 0x32')
|
||||
year = time.strftime("%Y")
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'/sbin/hwclock -f /dev/rtc1', year)
|
||||
self.do_ast2600_pcie_test()
|
||||
|
||||
def test_arm_ast2600_otp_blockdev_device(self):
|
||||
self.vm.set_machine("ast2600-evb")
|
||||
|
||||
image_path = self.archive_extract(self.ASSET_SDK_V907_AST2600)
|
||||
otp_img = self.generate_otpmem_image()
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-blockdev", f"driver=file,filename={otp_img},node-name=otp",
|
||||
"-global", "aspeed-otp.drive=otp",
|
||||
)
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.scratch_file("ast2600-default", "image-bmc"))
|
||||
self.wait_for_console_pattern("ast2600-default login:")
|
||||
|
||||
if __name__ == '__main__':
|
||||
AspeedTest.main()
|
||||
94
tests/functional/arm/test_aspeed_ast2600_sdk.py
Executable file
94
tests/functional/arm/test_aspeed_ast2600_sdk.py
Executable file
|
|
@ -0,0 +1,94 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots the ASPEED machines
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import time
|
||||
|
||||
from qemu_test import Asset
|
||||
from aspeed import AspeedTest
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
|
||||
|
||||
class AST2600Machine(AspeedTest):
|
||||
|
||||
ASSET_SDK_V908_AST2600 = Asset(
|
||||
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.08/ast2600-default-obmc.tar.gz',
|
||||
'a0414f14ad696550efe083c2156dbeda855c08cc9ae7f40fe1b41bf292295f82')
|
||||
|
||||
def do_ast2600_pcie_test(self):
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 80:00.0',
|
||||
'80:00.0 Host bridge: '
|
||||
'ASPEED Technology, Inc. Device 2600')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 80:08.0',
|
||||
'80:08.0 PCI bridge: '
|
||||
'ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'lspci -s 81:00.0',
|
||||
'81:00.0 Ethernet controller: '
|
||||
'Intel Corporation 82574L Gigabit Network Connection')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'ip addr show dev eth4',
|
||||
'inet 10.0.2.15/24')
|
||||
|
||||
def test_arm_ast2600_evb_sdk(self):
|
||||
self.set_machine('ast2600-evb')
|
||||
self.require_netdev('user')
|
||||
|
||||
self.archive_extract(self.ASSET_SDK_V908_AST2600)
|
||||
|
||||
self.vm.add_args('-device',
|
||||
'tmp105,bus=aspeed.i2c.bus.5,address=0x4d,id=tmp-test')
|
||||
self.vm.add_args('-device',
|
||||
'ds1338,bus=aspeed.i2c.bus.5,address=0x32')
|
||||
self.vm.add_args('-device', 'e1000e,netdev=net1,bus=pcie.0')
|
||||
self.vm.add_args('-netdev', 'user,id=net1')
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.scratch_file("ast2600-default", "image-bmc"))
|
||||
|
||||
self.wait_for_console_pattern('ast2600-default login:')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
|
||||
exec_command_and_wait_for_pattern(self, '0penBmc',
|
||||
'root@ast2600-default:~#')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo lm75 0x4d > /sys/class/i2c-dev/i2c-5/device/new_device',
|
||||
'i2c i2c-5: new_device: Instantiated device lm75 at 0x4d')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/class/hwmon/hwmon19/temp1_input', '0')
|
||||
self.vm.cmd('qom-set', path='/machine/peripheral/tmp-test',
|
||||
property='temperature', value=18000)
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/class/hwmon/hwmon19/temp1_input', '18000')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo ds1307 0x32 > /sys/class/i2c-dev/i2c-5/device/new_device',
|
||||
'i2c i2c-5: new_device: Instantiated device ds1307 at 0x32')
|
||||
year = time.strftime("%Y")
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'/sbin/hwclock -f /dev/rtc1', year)
|
||||
self.do_ast2600_pcie_test()
|
||||
|
||||
def test_arm_ast2600_otp_blockdev_device(self):
|
||||
self.vm.set_machine("ast2600-evb")
|
||||
|
||||
image_path = self.archive_extract(self.ASSET_SDK_V908_AST2600)
|
||||
otp_img = self.generate_otpmem_image()
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-blockdev", f"driver=file,filename={otp_img},node-name=otp",
|
||||
"-global", "aspeed-otp.drive=otp",
|
||||
)
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.scratch_file("ast2600-default", "image-bmc"))
|
||||
self.wait_for_console_pattern("ast2600-default login:")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
AspeedTest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue