Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-2…
Browse files Browse the repository at this point in the history
…0210616' into staging

target-arm queue:
 * hw/intc/arm_gicv3_cpuif: Tolerate spurious EOIR writes
 * handle some UNALLOCATED decode cases correctly rather
   than asserting
 * hw: virt: consider hw_compat_6_0
 * hw/arm: add quanta-gbs-bmc machine
 * hw/intc/armv7m_nvic: Remove stale comment
 * target/arm: Fix mte page crossing test
 * hw/arm: quanta-q71l add pca954x muxes
 * target/arm: First few parts of MVE support

# gpg: Signature made Wed 16 Jun 2021 14:34:49 BST
# gpg:                using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE
# gpg:                issuer "peter.maydell@linaro.org"
# gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [ultimate]
# gpg:                 aka "Peter Maydell <pmaydell@gmail.com>" [ultimate]
# gpg:                 aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [ultimate]
# Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83  15CF 3C25 25ED 1436 0CDE

* remotes/pmaydell/tags/pull-target-arm-20210616: (25 commits)
  include/qemu/int128.h: Add function to create Int128 from int64_t
  bitops.h: Provide hswap32(), hswap64(), wswap64() swapping operations
  target/arm: Move expand_pred_b() data to vec_helper.c
  target/arm: Add framework for MVE decode
  target/arm: Implement MVE LETP insn
  target/arm: Implement MVE DLSTP
  target/arm: Implement MVE WLSTP insn
  target/arm: Implement MVE LCTP
  target/arm: Let vfp_access_check() handle late NOCP checks
  target/arm: Add handling for PSR.ECI/ICI
  target/arm: Handle VPR semantics in existing code
  target/arm: Enable FPSCR.QC bit for MVE
  target/arm: Provide and use H8 and H1_8 macros
  hw/arm: quanta-q71l add pca954x muxes
  hw/arm: gsj add pca9548
  hw/arm: gsj add i2c comments
  target/arm: Fix mte page crossing test
  hw/intc/armv7m_nvic: Remove stale comment
  hw/arm: quanta-gbs-bmc add i2c comments
  hw/arm: add quanta-gbs-bmc machine
  ...

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pm215 committed Jun 16, 2021
2 parents e3897b7 + 703235a commit 38848ce
Show file tree
Hide file tree
Showing 26 changed files with 965 additions and 346 deletions.
2 changes: 2 additions & 0 deletions hw/arm/Kconfig
Expand Up @@ -378,6 +378,7 @@ config NPCM7XX
select SERIAL
select SSI
select UNIMP
select PCA954X

config FSL_IMX25
bool
Expand Down Expand Up @@ -413,6 +414,7 @@ config ASPEED_SOC
select PCA9552
select SERIAL
select SMBUS_EEPROM
select PCA954X
select SSI
select SSI_M25P80
select TMP105
Expand Down
11 changes: 8 additions & 3 deletions hw/arm/aspeed.c
Expand Up @@ -14,6 +14,7 @@
#include "hw/arm/boot.h"
#include "hw/arm/aspeed.h"
#include "hw/arm/aspeed_soc.h"
#include "hw/i2c/i2c_mux_pca954x.h"
#include "hw/i2c/smbus_eeprom.h"
#include "hw/misc/pca9552.h"
#include "hw/misc/tmp105.h"
Expand Down Expand Up @@ -461,14 +462,18 @@ static void quanta_q71l_bmc_i2c_init(AspeedMachineState *bmc)
/* TODO: i2c-1: Add Frontpanel FRU eeprom@57 24c64 */
/* TODO: Add Memory Riser i2c mux and eeproms. */

/* TODO: i2c-2: pca9546@74 */
/* TODO: i2c-2: pca9548@77 */
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 2), "pca9546", 0x74);
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 2), "pca9548", 0x77);

/* TODO: i2c-3: Add BIOS FRU eeprom@56 24c64 */
/* TODO: i2c-7: Add pca9546@70 */

/* i2c-7 */
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 7), "pca9546", 0x70);
/* - i2c@0: pmbus@59 */
/* - i2c@1: pmbus@58 */
/* - i2c@2: pmbus@58 */
/* - i2c@3: pmbus@59 */

/* TODO: i2c-7: Add PDB FRU eeprom@52 */
/* TODO: i2c-8: Add BMC FRU eeprom@50 */
}
Expand Down
107 changes: 106 additions & 1 deletion hw/arm/npcm7xx_boards.c
Expand Up @@ -18,6 +18,7 @@

#include "hw/arm/npcm7xx.h"
#include "hw/core/cpu.h"
#include "hw/i2c/i2c_mux_pca954x.h"
#include "hw/i2c/smbus_eeprom.h"
#include "hw/loader.h"
#include "hw/qdev-core.h"
Expand All @@ -29,6 +30,7 @@

#define NPCM750_EVB_POWER_ON_STRAPS 0x00001ff7
#define QUANTA_GSJ_POWER_ON_STRAPS 0x00001fff
#define QUANTA_GBS_POWER_ON_STRAPS 0x000017ff

static const char npcm7xx_default_bootrom[] = "npcm7xx_bootrom.bin";

Expand Down Expand Up @@ -220,7 +222,18 @@ static void quanta_gsj_i2c_init(NPCM7xxState *soc)
at24c_eeprom_init(soc, 9, 0x55, 8192);
at24c_eeprom_init(soc, 10, 0x55, 8192);

/* TODO: Add additional i2c devices. */
/*
* i2c-11:
* - power-brick@36: delta,dps800
* - hotswap@15: ti,lm5066i
*/

/*
* i2c-12:
* - ucd90160@6b
*/

i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 15), "pca9548", 0x75);
}

static void quanta_gsj_fan_init(NPCM7xxMachine *machine, NPCM7xxState *soc)
Expand All @@ -237,6 +250,65 @@ static void quanta_gsj_fan_init(NPCM7xxMachine *machine, NPCM7xxState *soc)
npcm7xx_connect_pwm_fan(soc, &splitter[2], 0x05, 1);
}

static void quanta_gbs_i2c_init(NPCM7xxState *soc)
{
/*
* i2c-0:
* pca9546@71
*
* i2c-1:
* pca9535@24
* pca9535@20
* pca9535@21
* pca9535@22
* pca9535@23
* pca9535@25
* pca9535@26
*
* i2c-2:
* sbtsi@4c
*
* i2c-5:
* atmel,24c64@50 mb_fru
* pca9546@71
* - channel 0: max31725@54
* - channel 1: max31725@55
* - channel 2: max31725@5d
* atmel,24c64@51 fan_fru
* - channel 3: atmel,24c64@52 hsbp_fru
*
* i2c-6:
* pca9545@73
*
* i2c-7:
* pca9545@72
*
* i2c-8:
* adi,adm1272@10
*
* i2c-9:
* pca9546@71
* - channel 0: isil,isl68137@60
* - channel 1: isil,isl68137@61
* - channel 2: isil,isl68137@63
* - channel 3: isil,isl68137@45
*
* i2c-10:
* pca9545@71
*
* i2c-11:
* pca9545@76
*
* i2c-12:
* maxim,max34451@4e
* isil,isl68137@5d
* isil,isl68137@5e
*
* i2c-14:
* pca9545@70
*/
}

static void npcm750_evb_init(MachineState *machine)
{
NPCM7xxState *soc;
Expand Down Expand Up @@ -268,6 +340,23 @@ static void quanta_gsj_init(MachineState *machine)
npcm7xx_load_kernel(machine, soc);
}

static void quanta_gbs_init(MachineState *machine)
{
NPCM7xxState *soc;

soc = npcm7xx_create_soc(machine, QUANTA_GBS_POWER_ON_STRAPS);
npcm7xx_connect_dram(soc, machine->ram);
qdev_realize(DEVICE(soc), NULL, &error_fatal);

npcm7xx_load_bootrom(machine, soc);

npcm7xx_connect_flash(&soc->fiu[0], 0, "mx66u51235f",
drive_get(IF_MTD, 0, 0));

quanta_gbs_i2c_init(soc);
npcm7xx_load_kernel(machine, soc);
}

static void npcm7xx_set_soc_type(NPCM7xxMachineClass *nmc, const char *type)
{
NPCM7xxClass *sc = NPCM7XX_CLASS(object_class_by_name(type));
Expand Down Expand Up @@ -316,6 +405,18 @@ static void gsj_machine_class_init(ObjectClass *oc, void *data)
mc->default_ram_size = 512 * MiB;
};

static void gbs_bmc_machine_class_init(ObjectClass *oc, void *data)
{
NPCM7xxMachineClass *nmc = NPCM7XX_MACHINE_CLASS(oc);
MachineClass *mc = MACHINE_CLASS(oc);

npcm7xx_set_soc_type(nmc, TYPE_NPCM730);

mc->desc = "Quanta GBS (Cortex-A9)";
mc->init = quanta_gbs_init;
mc->default_ram_size = 1 * GiB;
}

static const TypeInfo npcm7xx_machine_types[] = {
{
.name = TYPE_NPCM7XX_MACHINE,
Expand All @@ -332,6 +433,10 @@ static const TypeInfo npcm7xx_machine_types[] = {
.name = MACHINE_TYPE_NAME("quanta-gsj"),
.parent = TYPE_NPCM7XX_MACHINE,
.class_init = gsj_machine_class_init,
}, {
.name = MACHINE_TYPE_NAME("quanta-gbs-bmc"),
.parent = TYPE_NPCM7XX_MACHINE,
.class_init = gbs_bmc_machine_class_init,
},
};

Expand Down
2 changes: 2 additions & 0 deletions hw/arm/virt.c
Expand Up @@ -2766,6 +2766,8 @@ DEFINE_VIRT_MACHINE_AS_LATEST(6, 1)

static void virt_machine_6_0_options(MachineClass *mc)
{
virt_machine_6_1_options(mc);
compat_props_add(mc->compat_props, hw_compat_6_0, hw_compat_6_0_len);
}
DEFINE_VIRT_MACHINE(6, 0)

Expand Down
5 changes: 4 additions & 1 deletion hw/intc/arm_gicv3_cpuif.c
Expand Up @@ -14,6 +14,7 @@

#include "qemu/osdep.h"
#include "qemu/bitops.h"
#include "qemu/log.h"
#include "qemu/main-loop.h"
#include "trace.h"
#include "gicv3_internal.h"
Expand Down Expand Up @@ -1357,7 +1358,9 @@ static void icc_eoir_write(CPUARMState *env, const ARMCPRegInfo *ri,
}
break;
default:
g_assert_not_reached();
qemu_log_mask(LOG_GUEST_ERROR,
"%s: IRQ %d isn't active\n", __func__, irq);
return;
}

icc_drop_prio(cs, grp);
Expand Down
6 changes: 0 additions & 6 deletions hw/intc/armv7m_nvic.c
Expand Up @@ -2941,12 +2941,6 @@ static void armv7m_nvic_realize(DeviceState *dev, Error **errp)

static void armv7m_nvic_instance_init(Object *obj)
{
/* We have a different default value for the num-irq property
* than our superclass. This function runs after qdev init
* has set the defaults from the Property array and before
* any user-specified property setting, so just modify the
* value in the GICState struct.
*/
DeviceState *dev = DEVICE(obj);
NVICState *nvic = NVIC(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
Expand Down
29 changes: 29 additions & 0 deletions include/qemu/bitops.h
Expand Up @@ -291,6 +291,35 @@ static inline uint64_t ror64(uint64_t word, unsigned int shift)
return (word >> shift) | (word << ((64 - shift) & 63));
}

/**
* hswap32 - swap 16-bit halfwords within a 32-bit value
* @h: value to swap
*/
static inline uint32_t hswap32(uint32_t h)
{
return rol32(h, 16);
}

/**
* hswap64 - swap 16-bit halfwords within a 64-bit value
* @h: value to swap
*/
static inline uint64_t hswap64(uint64_t h)
{
uint64_t m = 0x0000ffff0000ffffull;
h = rol64(h, 32);
return ((h & m) << 16) | ((h >> 16) & m);
}

/**
* wswap64 - swap 32-bit words within a 64-bit value
* @h: value to swap
*/
static inline uint64_t wswap64(uint64_t h)
{
return rol64(h, 32);
}

/**
* extract32:
* @value: the value to extract the bit field from
Expand Down
10 changes: 10 additions & 0 deletions include/qemu/int128.h
Expand Up @@ -11,6 +11,11 @@ static inline Int128 int128_make64(uint64_t a)
return a;
}

static inline Int128 int128_makes64(int64_t a)
{
return a;
}

static inline Int128 int128_make128(uint64_t lo, uint64_t hi)
{
return (__uint128_t)hi << 64 | lo;
Expand Down Expand Up @@ -167,6 +172,11 @@ static inline Int128 int128_make64(uint64_t a)
return (Int128) { a, 0 };
}

static inline Int128 int128_makes64(int64_t a)
{
return (Int128) { a, a >> 63 };
}

static inline Int128 int128_make128(uint64_t lo, uint64_t hi)
{
return (Int128) { lo, hi };
Expand Down

0 comments on commit 38848ce

Please sign in to comment.