aspeed queue:
* Coverity fixes * Deprecation of tacoma-bmc machine * Buffer overflow fix in GPIO model * Minor cleanup -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmaDs3QACgkQUaNDx8/7 7KEc/BAAj5AS3rLm3NPpU13y1P1hcjuSm1/PVGTJQH+m4K9UaAkJ8VhRB0Y/rdU6 ygGhKaCHyk96+I49Csz886YU9Wg9qnxaYJAbornHZJVGNy5tuVpQKM20kfgN3XFN ENJR3e+J6Ye7kCtR1ujcf0mydWDaDyq0i82ykURsudcQLMnGq1gBQGadYjt1hJoN F9HDPgUJ8/wjQnG8BomsrnuvUSpRTbGNV66FNxXdQ6C6d6OTKQfNnXXqrKO+8QPK B5XB9FjTk017DUog1jdE1SaEMowml8CmUhjMwLHOcyWhcZpEk90aMX8cQhefUs9y O6kNin2UYEjcTHA/lyfMQJQMNDDZTE32MyP1LwRE/5ZiHqrT7ViqNvZSPBGBueUz 9B0xiQTuYqcRqlwgyU73DvnTgrsKFdKQSldj5dXYVnWCKeKY/sCWApHMJxN9xMCA Uw1E4QfCLkd+TM6DoJAkBHWFsgi44Aym11VU4VviGNRNTgmTptgQzmHiYGNFiGZG OypVPM8Ti6UeVnW65l9J9f7xA0jDB+XQjhCCaoax9GlUMA4C4/Aln5OXXxIWRWFd XA3Gn3c/S2j7rMqdfAk68xDHuAJ3wShHlw6HLRd1Xki05WFTeLj1lejLHMdfpNmr DkQimzHShBqZzZGxc7FsO0keGY8kyIJkZhbCCbZrFXJXQGRdBao= =LxwO -----END PGP SIGNATURE----- Merge tag 'pull-aspeed-20240702' of https://github.com/legoater/qemu into staging aspeed queue: * Coverity fixes * Deprecation of tacoma-bmc machine * Buffer overflow fix in GPIO model * Minor cleanup # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEoPZlSPBIlev+awtgUaNDx8/77KEFAmaDs3QACgkQUaNDx8/7 # 7KEc/BAAj5AS3rLm3NPpU13y1P1hcjuSm1/PVGTJQH+m4K9UaAkJ8VhRB0Y/rdU6 # ygGhKaCHyk96+I49Csz886YU9Wg9qnxaYJAbornHZJVGNy5tuVpQKM20kfgN3XFN # ENJR3e+J6Ye7kCtR1ujcf0mydWDaDyq0i82ykURsudcQLMnGq1gBQGadYjt1hJoN # F9HDPgUJ8/wjQnG8BomsrnuvUSpRTbGNV66FNxXdQ6C6d6OTKQfNnXXqrKO+8QPK # B5XB9FjTk017DUog1jdE1SaEMowml8CmUhjMwLHOcyWhcZpEk90aMX8cQhefUs9y # O6kNin2UYEjcTHA/lyfMQJQMNDDZTE32MyP1LwRE/5ZiHqrT7ViqNvZSPBGBueUz # 9B0xiQTuYqcRqlwgyU73DvnTgrsKFdKQSldj5dXYVnWCKeKY/sCWApHMJxN9xMCA # Uw1E4QfCLkd+TM6DoJAkBHWFsgi44Aym11VU4VviGNRNTgmTptgQzmHiYGNFiGZG # OypVPM8Ti6UeVnW65l9J9f7xA0jDB+XQjhCCaoax9GlUMA4C4/Aln5OXXxIWRWFd # XA3Gn3c/S2j7rMqdfAk68xDHuAJ3wShHlw6HLRd1Xki05WFTeLj1lejLHMdfpNmr # DkQimzHShBqZzZGxc7FsO0keGY8kyIJkZhbCCbZrFXJXQGRdBao= # =LxwO # -----END PGP SIGNATURE----- # gpg: Signature made Tue 02 Jul 2024 12:59:48 AM PDT # gpg: using RSA key A0F66548F04895EBFE6B0B6051A343C7CFFBECA1 # gpg: Good signature from "Cédric Le Goater <clg@kaod.org>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: A0F6 6548 F048 95EB FE6B 0B60 51A3 43C7 CFFB ECA1 * tag 'pull-aspeed-20240702' of https://github.com/legoater/qemu: hw/net:ftgmac100: fix coding style aspeed/sdmc: Remove extra R_MAIN_STATUS case aspeed/soc: Fix possible divide by zero aspeed/sdmc: Check RAM size value at realize time aspeed: Deprecate the tacoma-bmc machine hw/gpio/aspeed: Add reg_table_count to AspeedGPIOClass Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
8a2b8894d2
@ -269,6 +269,14 @@ images are not available, OpenWRT dropped support in 2019, U-Boot in
|
|||||||
2017, Linux also is dropping support in 2024. It is time to let go of
|
2017, Linux also is dropping support in 2024. It is time to let go of
|
||||||
this ancient hardware and focus on newer CPUs and platforms.
|
this ancient hardware and focus on newer CPUs and platforms.
|
||||||
|
|
||||||
|
Arm ``tacoma-bmc`` machine (since 9.1)
|
||||||
|
''''''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
The ``tacoma-bmc`` machine was a board including an AST2600 SoC based
|
||||||
|
BMC and a witherspoon like OpenPOWER system. It was used for bring up
|
||||||
|
of the AST2600 SoC in labs. It can be easily replaced by the
|
||||||
|
``rainier-bmc`` machine which is a real product.
|
||||||
|
|
||||||
Backend options
|
Backend options
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@ -1379,6 +1379,8 @@ static void aspeed_machine_tacoma_class_init(ObjectClass *oc, void *data)
|
|||||||
amc->i2c_init = witherspoon_bmc_i2c_init; /* Same board layout */
|
amc->i2c_init = witherspoon_bmc_i2c_init; /* Same board layout */
|
||||||
mc->default_ram_size = 1 * GiB;
|
mc->default_ram_size = 1 * GiB;
|
||||||
aspeed_machine_class_init_cpus_defaults(mc);
|
aspeed_machine_class_init_cpus_defaults(mc);
|
||||||
|
|
||||||
|
mc->deprecation_reason = "Please use the similar 'rainier-bmc' machine";
|
||||||
};
|
};
|
||||||
|
|
||||||
static void aspeed_machine_g220a_class_init(ObjectClass *oc, void *data)
|
static void aspeed_machine_g220a_class_init(ObjectClass *oc, void *data)
|
||||||
|
@ -211,6 +211,8 @@ static void aspeed_ram_capacity_write(void *opaque, hwaddr addr, uint64_t data,
|
|||||||
ram_size = object_property_get_uint(OBJECT(&s->sdmc), "ram-size",
|
ram_size = object_property_get_uint(OBJECT(&s->sdmc), "ram-size",
|
||||||
&error_abort);
|
&error_abort);
|
||||||
|
|
||||||
|
assert(ram_size > 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Emulate ddr capacity hardware behavior.
|
* Emulate ddr capacity hardware behavior.
|
||||||
* If writes the data to the address which is beyond the ram size,
|
* If writes the data to the address which is beyond the ram size,
|
||||||
|
@ -559,6 +559,12 @@ static uint64_t aspeed_gpio_read(void *opaque, hwaddr offset, uint32_t size)
|
|||||||
return debounce_value;
|
return debounce_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (idx >= agc->reg_table_count) {
|
||||||
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: idx 0x%" PRIx64 " out of bounds\n",
|
||||||
|
__func__, idx);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
reg = &agc->reg_table[idx];
|
reg = &agc->reg_table[idx];
|
||||||
if (reg->set_idx >= agc->nr_gpio_sets) {
|
if (reg->set_idx >= agc->nr_gpio_sets) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: no getter for offset 0x%"
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: no getter for offset 0x%"
|
||||||
@ -785,6 +791,12 @@ static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (idx >= agc->reg_table_count) {
|
||||||
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: idx 0x%" PRIx64 " out of bounds\n",
|
||||||
|
__func__, idx);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
reg = &agc->reg_table[idx];
|
reg = &agc->reg_table[idx];
|
||||||
if (reg->set_idx >= agc->nr_gpio_sets) {
|
if (reg->set_idx >= agc->nr_gpio_sets) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: no setter for offset 0x%"
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: no setter for offset 0x%"
|
||||||
@ -1117,6 +1129,7 @@ static void aspeed_gpio_ast2400_class_init(ObjectClass *klass, void *data)
|
|||||||
agc->nr_gpio_pins = 216;
|
agc->nr_gpio_pins = 216;
|
||||||
agc->nr_gpio_sets = 7;
|
agc->nr_gpio_sets = 7;
|
||||||
agc->reg_table = aspeed_3_3v_gpios;
|
agc->reg_table = aspeed_3_3v_gpios;
|
||||||
|
agc->reg_table_count = GPIO_3_3V_REG_ARRAY_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void aspeed_gpio_2500_class_init(ObjectClass *klass, void *data)
|
static void aspeed_gpio_2500_class_init(ObjectClass *klass, void *data)
|
||||||
@ -1127,6 +1140,7 @@ static void aspeed_gpio_2500_class_init(ObjectClass *klass, void *data)
|
|||||||
agc->nr_gpio_pins = 228;
|
agc->nr_gpio_pins = 228;
|
||||||
agc->nr_gpio_sets = 8;
|
agc->nr_gpio_sets = 8;
|
||||||
agc->reg_table = aspeed_3_3v_gpios;
|
agc->reg_table = aspeed_3_3v_gpios;
|
||||||
|
agc->reg_table_count = GPIO_3_3V_REG_ARRAY_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void aspeed_gpio_ast2600_3_3v_class_init(ObjectClass *klass, void *data)
|
static void aspeed_gpio_ast2600_3_3v_class_init(ObjectClass *klass, void *data)
|
||||||
@ -1137,6 +1151,7 @@ static void aspeed_gpio_ast2600_3_3v_class_init(ObjectClass *klass, void *data)
|
|||||||
agc->nr_gpio_pins = 208;
|
agc->nr_gpio_pins = 208;
|
||||||
agc->nr_gpio_sets = 7;
|
agc->nr_gpio_sets = 7;
|
||||||
agc->reg_table = aspeed_3_3v_gpios;
|
agc->reg_table = aspeed_3_3v_gpios;
|
||||||
|
agc->reg_table_count = GPIO_3_3V_REG_ARRAY_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void aspeed_gpio_ast2600_1_8v_class_init(ObjectClass *klass, void *data)
|
static void aspeed_gpio_ast2600_1_8v_class_init(ObjectClass *klass, void *data)
|
||||||
@ -1147,6 +1162,7 @@ static void aspeed_gpio_ast2600_1_8v_class_init(ObjectClass *klass, void *data)
|
|||||||
agc->nr_gpio_pins = 36;
|
agc->nr_gpio_pins = 36;
|
||||||
agc->nr_gpio_sets = 2;
|
agc->nr_gpio_sets = 2;
|
||||||
agc->reg_table = aspeed_1_8v_gpios;
|
agc->reg_table = aspeed_1_8v_gpios;
|
||||||
|
agc->reg_table_count = GPIO_1_8V_REG_ARRAY_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void aspeed_gpio_1030_class_init(ObjectClass *klass, void *data)
|
static void aspeed_gpio_1030_class_init(ObjectClass *klass, void *data)
|
||||||
@ -1157,6 +1173,7 @@ static void aspeed_gpio_1030_class_init(ObjectClass *klass, void *data)
|
|||||||
agc->nr_gpio_pins = 151;
|
agc->nr_gpio_pins = 151;
|
||||||
agc->nr_gpio_sets = 6;
|
agc->nr_gpio_sets = 6;
|
||||||
agc->reg_table = aspeed_3_3v_gpios;
|
agc->reg_table = aspeed_3_3v_gpios;
|
||||||
|
agc->reg_table_count = GPIO_3_3V_REG_ARRAY_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo aspeed_gpio_info = {
|
static const TypeInfo aspeed_gpio_info = {
|
||||||
|
@ -271,6 +271,12 @@ static void aspeed_sdmc_realize(DeviceState *dev, Error **errp)
|
|||||||
AspeedSDMCClass *asc = ASPEED_SDMC_GET_CLASS(s);
|
AspeedSDMCClass *asc = ASPEED_SDMC_GET_CLASS(s);
|
||||||
|
|
||||||
assert(asc->max_ram_size < 4 * GiB || asc->is_bus64bit);
|
assert(asc->max_ram_size < 4 * GiB || asc->is_bus64bit);
|
||||||
|
|
||||||
|
if (!s->ram_size) {
|
||||||
|
error_setg(errp, "RAM size is not set");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
s->max_ram_size = asc->max_ram_size;
|
s->max_ram_size = asc->max_ram_size;
|
||||||
|
|
||||||
memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_sdmc_ops, s,
|
memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_sdmc_ops, s,
|
||||||
@ -589,7 +595,6 @@ static void aspeed_2700_sdmc_write(AspeedSDMCState *s, uint32_t reg,
|
|||||||
case R_INT_STATUS:
|
case R_INT_STATUS:
|
||||||
case R_INT_CLEAR:
|
case R_INT_CLEAR:
|
||||||
case R_INT_MASK:
|
case R_INT_MASK:
|
||||||
case R_MAIN_STATUS:
|
|
||||||
case R_ERR_STATUS:
|
case R_ERR_STATUS:
|
||||||
case R_ECC_FAIL_STATUS:
|
case R_ECC_FAIL_STATUS:
|
||||||
case R_ECC_FAIL_ADDR:
|
case R_ECC_FAIL_ADDR:
|
||||||
|
@ -238,7 +238,8 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
#define FTGMAC100_MAX_FRAME_SIZE 9220
|
#define FTGMAC100_MAX_FRAME_SIZE 9220
|
||||||
|
|
||||||
/* Limits depending on the type of the frame
|
/*
|
||||||
|
* Limits depending on the type of the frame
|
||||||
*
|
*
|
||||||
* 9216 for Jumbo frames (+ 4 for VLAN)
|
* 9216 for Jumbo frames (+ 4 for VLAN)
|
||||||
* 1518 for other frames (+ 4 for VLAN)
|
* 1518 for other frames (+ 4 for VLAN)
|
||||||
@ -533,8 +534,10 @@ static void ftgmac100_do_tx(FTGMAC100State *s, uint32_t tx_ring,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* record transmit flags as they are valid only on the first
|
/*
|
||||||
* segment */
|
* record transmit flags as they are valid only on the first
|
||||||
|
* segment
|
||||||
|
*/
|
||||||
if (bd.des0 & FTGMAC100_TXDES0_FTS) {
|
if (bd.des0 & FTGMAC100_TXDES0_FTS) {
|
||||||
flags = bd.des1;
|
flags = bd.des1;
|
||||||
}
|
}
|
||||||
@ -639,7 +642,8 @@ static bool ftgmac100_can_receive(NetClientState *nc)
|
|||||||
*/
|
*/
|
||||||
static uint32_t ftgmac100_rxpoll(FTGMAC100State *s)
|
static uint32_t ftgmac100_rxpoll(FTGMAC100State *s)
|
||||||
{
|
{
|
||||||
/* Polling times :
|
/*
|
||||||
|
* Polling times :
|
||||||
*
|
*
|
||||||
* Speed TIME_SEL=0 TIME_SEL=1
|
* Speed TIME_SEL=0 TIME_SEL=1
|
||||||
*
|
*
|
||||||
|
@ -75,6 +75,7 @@ struct AspeedGPIOClass {
|
|||||||
uint32_t nr_gpio_pins;
|
uint32_t nr_gpio_pins;
|
||||||
uint32_t nr_gpio_sets;
|
uint32_t nr_gpio_sets;
|
||||||
const AspeedGPIOReg *reg_table;
|
const AspeedGPIOReg *reg_table;
|
||||||
|
unsigned reg_table_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AspeedGPIOState {
|
struct AspeedGPIOState {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user