hw/arm: Add I2C sensors and EEPROM for GSJ machine
Add AT24 EEPROM and temperature sensors for GSJ machine. Reviewed-by: Doug Evans<dje@google.com> Reviewed-by: Tyrong Ting<kfting@nuvoton.com> Signed-off-by: Hao Wu <wuhaotsh@google.com> Message-id: 20210210220426.3577804-4-wuhaotsh@google.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
86248f533e
commit
2ef1e0d7dc
@ -370,6 +370,7 @@ config NPCM7XX
|
|||||||
bool
|
bool
|
||||||
select A9MPCORE
|
select A9MPCORE
|
||||||
select ARM_GIC
|
select ARM_GIC
|
||||||
|
select AT24C # EEPROM
|
||||||
select PL310 # cache controller
|
select PL310 # cache controller
|
||||||
select SERIAL
|
select SERIAL
|
||||||
select SSI
|
select SSI
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "exec/address-spaces.h"
|
#include "exec/address-spaces.h"
|
||||||
#include "hw/arm/npcm7xx.h"
|
#include "hw/arm/npcm7xx.h"
|
||||||
#include "hw/core/cpu.h"
|
#include "hw/core/cpu.h"
|
||||||
|
#include "hw/i2c/smbus_eeprom.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/qdev-properties.h"
|
#include "hw/qdev-properties.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
@ -104,6 +105,17 @@ static I2CBus *npcm7xx_i2c_get_bus(NPCM7xxState *soc, uint32_t num)
|
|||||||
return I2C_BUS(qdev_get_child_bus(DEVICE(&soc->smbus[num]), "i2c-bus"));
|
return I2C_BUS(qdev_get_child_bus(DEVICE(&soc->smbus[num]), "i2c-bus"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void at24c_eeprom_init(NPCM7xxState *soc, int bus, uint8_t addr,
|
||||||
|
uint32_t rsize)
|
||||||
|
{
|
||||||
|
I2CBus *i2c_bus = npcm7xx_i2c_get_bus(soc, bus);
|
||||||
|
I2CSlave *i2c_dev = i2c_slave_new("at24c-eeprom", addr);
|
||||||
|
DeviceState *dev = DEVICE(i2c_dev);
|
||||||
|
|
||||||
|
qdev_prop_set_uint32(dev, "rom-size", rsize);
|
||||||
|
i2c_slave_realize_and_unref(i2c_dev, i2c_bus, &error_abort);
|
||||||
|
}
|
||||||
|
|
||||||
static void npcm750_evb_i2c_init(NPCM7xxState *soc)
|
static void npcm750_evb_i2c_init(NPCM7xxState *soc)
|
||||||
{
|
{
|
||||||
/* lm75 temperature sensor on SVB, tmp105 is compatible */
|
/* lm75 temperature sensor on SVB, tmp105 is compatible */
|
||||||
@ -116,6 +128,20 @@ static void npcm750_evb_i2c_init(NPCM7xxState *soc)
|
|||||||
i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 6), "tmp105", 0x48);
|
i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 6), "tmp105", 0x48);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void quanta_gsj_i2c_init(NPCM7xxState *soc)
|
||||||
|
{
|
||||||
|
/* GSJ machine have 4 max31725 temperature sensors, tmp105 is compatible. */
|
||||||
|
i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 1), "tmp105", 0x5c);
|
||||||
|
i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 2), "tmp105", 0x5c);
|
||||||
|
i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 3), "tmp105", 0x5c);
|
||||||
|
i2c_slave_create_simple(npcm7xx_i2c_get_bus(soc, 4), "tmp105", 0x5c);
|
||||||
|
|
||||||
|
at24c_eeprom_init(soc, 9, 0x55, 8192);
|
||||||
|
at24c_eeprom_init(soc, 10, 0x55, 8192);
|
||||||
|
|
||||||
|
/* TODO: Add additional i2c devices. */
|
||||||
|
}
|
||||||
|
|
||||||
static void npcm750_evb_init(MachineState *machine)
|
static void npcm750_evb_init(MachineState *machine)
|
||||||
{
|
{
|
||||||
NPCM7xxState *soc;
|
NPCM7xxState *soc;
|
||||||
@ -141,6 +167,7 @@ static void quanta_gsj_init(MachineState *machine)
|
|||||||
npcm7xx_load_bootrom(machine, soc);
|
npcm7xx_load_bootrom(machine, soc);
|
||||||
npcm7xx_connect_flash(&soc->fiu[0], 0, "mx25l25635e",
|
npcm7xx_connect_flash(&soc->fiu[0], 0, "mx25l25635e",
|
||||||
drive_get(IF_MTD, 0, 0));
|
drive_get(IF_MTD, 0, 0));
|
||||||
|
quanta_gsj_i2c_init(soc);
|
||||||
npcm7xx_load_kernel(machine, soc);
|
npcm7xx_load_kernel(machine, soc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user