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
>
>

Reply via email to