On Wed, Jun 3, 2026 at 5:03 PM Joel Stanley <[email protected]> wrote: > > Add an I2C RTC device and a temperature sensor. These are not present > on the board but help for testing.
It might be best to leave this out, if these aren't on the board should they really go upstream? Alistair > > The tmp105 is a lm75 compatible temperature sensor used by the > SENSORS_LM75 Linux kernel driver. > > The ds1338 is a RTC device that is used by the RTC_DRV_DS1307 Linux > kernel driver. > > Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > Signed-off-by: Nicholas Piggin <[email protected]> > Signed-off-by: Joel Stanley <[email protected]> > --- > hw/riscv/tt_atlantis.c | 27 +++++++++++++++++++++++++++ > hw/riscv/Kconfig | 2 ++ > 2 files changed, 29 insertions(+) > > diff --git a/hw/riscv/tt_atlantis.c b/hw/riscv/tt_atlantis.c > index b1ff0cbe2f61..5434650dd41e 100644 > --- a/hw/riscv/tt_atlantis.c > +++ b/hw/riscv/tt_atlantis.c > @@ -63,6 +63,13 @@ static const MemMapEntry tt_atlantis_memmap[] = { > [TT_ATL_DDR_HI] = { 0x100000000, 0x1000000000 }, > }; > > +static I2CBus *i2c_get_bus(TTAtlantisState *s, unsigned busnr) > +{ > + assert(busnr < TT_ATL_NUM_I2C); > + > + return s->i2c[busnr].bus; > +} > + > static uint32_t next_phandle(void) > { > static uint32_t phandle = 1; > @@ -367,6 +374,19 @@ static void create_fdt_i2c(void *fdt, const MemMapEntry > *mem, uint32_t irq, > qemu_fdt_setprop_cell(fdt, name, "#size-cells", 0); > } > > +static void create_fdt_i2c_device(TTAtlantisState *s, int bus, > + const char *compat, int addr) > +{ > + void *fdt = MACHINE(s)->fdt; > + hwaddr base = s->memmap[TT_ATL_I2C0 + bus].base; > + g_autofree char *name = > g_strdup_printf("/soc/i2c@%"HWADDR_PRIX"/sensor@%x", > + base, addr); > + > + qemu_fdt_add_subnode(fdt, name); > + qemu_fdt_setprop_string(fdt, name, "compatible", compat); > + qemu_fdt_setprop_cell(fdt, name, "reg", addr); > +} > + > static void finalize_fdt(TTAtlantisState *s) > { > uint32_t aplic_s_phandle = next_phandle(); > @@ -394,6 +414,9 @@ static void finalize_fdt(TTAtlantisState *s) > TT_ATL_I2C0_IRQ + i, > aplic_s_phandle, periph_clk_phandle); > } > + > + create_fdt_i2c_device(s, 0, "dallas,ds1338", 0x6f); > + create_fdt_i2c_device(s, 4, "ti,tmp105", 0x48); > } > > static void create_fdt(TTAtlantisState *s) > @@ -640,6 +663,10 @@ static void tt_atlantis_machine_init(MachineState > *machine) > qdev_get_gpio_in(s->irqchip, TT_ATL_I2C0_IRQ + > i)); > } > > + /* I2C peripherals: qemu specific */ > + i2c_slave_create_simple(i2c_get_bus(s, 0), "ds1338", 0x6f); > + i2c_slave_create_simple(i2c_get_bus(s, 4), "tmp105", 0x48); > + > /* Load or create device tree */ > if (machine->dtb) { > load_fdt(s); > diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig > index 38180a903fbf..ff2d250ee439 100644 > --- a/hw/riscv/Kconfig > +++ b/hw/riscv/Kconfig > @@ -130,6 +130,8 @@ config TENSTORRENT > select SERIAL_MM > select DEVICE_TREE > select DESIGNWARE_I2C > + select DS1338 > + select TMP105 > > config XIANGSHAN_KUNMINGHU > bool > -- > 2.47.3 > >
