From: Nicholas Piggin <npiggin@gmail.com>
To: Alistair Francis <alistair23@gmail.com>
Cc: "Joel Stanley" <joel@jms.id.au>,
"Alistair Francis" <alistair.francis@wdc.com>,
"Daniel Henrique Barboza" <daniel.barboza@oss.qualcomm.com>,
"Chao Liu" <chao.liu.zevorn@gmail.com>,
"Michael Ellerman" <mpe@kernel.org>,
"Joel Stanley" <jms@oss.tenstorrent.com>,
"Anirudh Srinivasan" <asrinivasan@oss.tenstorrent.com>,
"Portia Stephens" <portias@oss.tenstorrent.com>,
qemu-riscv@nongnu.org, qemu-devel@nongnu.org,
"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: Re: [PATCH v4 09/13] hw/riscv: Add Tenstorrent Atlantis machine
Date: Tue, 5 May 2026 16:00:49 +1000 [thread overview]
Message-ID: <afl6x1CTIx2jvMH0@lima-default> (raw)
In-Reply-To: <CAKmqyKMbWXFBSuiKyp1uQ5TBhFAEex961Jzp4To5uyBzuUGMBQ@mail.gmail.com>
On Tue, May 05, 2026 at 02:34:50PM +1000, Alistair Francis wrote:
> On Tue, May 5, 2026 at 11:04 AM Nicholas Piggin <npiggin@gmail.com> wrote:
> >
> > On Thu, Apr 30, 2026 at 09:57:34AM +1000, Alistair Francis wrote:
> > > On Sat, Apr 25, 2026 at 11:20 PM Joel Stanley <joel@jms.id.au> wrote:
> > > >
> > > > The Tenstorrent Atlantis platform is a collaboration between Tenstorrent
> > > > and CoreLab Technology. It is based on the Atlantis SoC, which includes
> > > > the Ascalon-X CPU and other IP from Tenstorrent and CoreLab Technology.
> > >
> > > Can you provide a link to documentation
> >
> > Also not presently.
>
> Hmmm... That's a bit annoying. Can we get some?
That's the plan but I don't have a date I can give you for it, sorry.
[...]
> > > > +static void create_fdt_cpus(TTAtlantisState *s, uint32_t *intc_phandles)
> > >
> > > So generally we only create a device tree for virtual boards, that is
> > > boards that don't really exist and are just QEMU constructs.
> > >
> > > You said that this is based on the "Atlantis SoC" so I assume it's
> > > real hardware. In the real hardware do you expect the device tree to
> > > be provided by the ROM? Usually for boards users supply the device
> > > tree as part of the boot flow (via u-boot or something similar). In
> > > which case should QEMU actually generate this or can users just supply
> > > their own?
> > >
> > > Basically the question is, if you are trying to model the hardware, is
> > > generating the device tree here correct?
> > >
> > > Obviously the advantage of doing it here is then the device tree
> > > describes what QEMU supports, which is great. But that can be harder
> > > to manage when the hardware doesn't do that, as then you have
> > > divergence.
> >
> > We went around this same discussion internally and yeah it's a valid
> > question, we could have explained this a bit better.
> >
> > In the real (unreleased) hardware and the DT will be loaded from ROM.
>
> Really? That usually doesn't go well
Well not ROM but flash loaded by early firmware. The plan is to have an
"M mode" dtb loaded for opensbi and then later stages supply their own
dtb.
The opensbi dtb won't go away from the tt-atlantis model, whether its
generated or we change it to use a dtb for the purpose of QEMU. I guess
if the next stage does not have its own dtb it can use one supplied by
opensbi.
Does that sound right? I don't know if I have the details exactly right.
> > I think we should do that when the model and firmware and dt is more
> > complete. At the moment it has been easier for development to use QEMU
> > generated fdt.
> >
> > Is that acceptable to do that now and switch to a fdt ROM later...
>
> Obviously guest software can decide to use whatever it wants. But what
> we don't want to do is break users. So removing the generated FDT
> (which is the equivalent of ROM FDT on hardware) will cause breakages.
> So we don't want to do that if we can avoid it. Also generating the
> FDT is overhead for us, so we only want to if the guest software will
> actually use it. Does that make sense?
>
> Adding the device tree later is fine though, as guests don't have to use it.
>
> >
> > [...]
> >
> > > > +static void finalize_fdt(TTAtlantisState *s)
> > > > +{
> > > > + uint32_t aplic_s_phandle = next_phandle();
> > > > + uint32_t imsic_s_phandle = next_phandle();
> > > > + void *fdt = MACHINE(s)->fdt;
> > > > +
> > > > + create_fdt_cpu(s, s->memmap, aplic_s_phandle, imsic_s_phandle);
> > > > +
> > > > + /*
> > > > + * We want to do this, but the Linux aplic driver was broken before v6.16
> > > > + *
> > > > + * qemu_fdt_setprop_cell(MACHINE(s)->fdt, "/soc", "interrupt-parent",
> > > > + * aplic_s_phandle);
> > > > + */
> > >
> > > And now we are stuck with hacks like this, which we really don't want
> > > to be dealing with. Maybe it's best to leave the device tree to the
> > > kernel.
> >
> > ... Despite issues like this?
>
> If the kernel generates a device tree for it to use then we don't have
> mismatched problems (like this one). Generating the DT in QEMU for
> real boards proves to be a challenge and this is exactly why. Now we
> have to choose between pre or post 6.16 support (I assume 6.16+ works
> without this, but you get the point).
Yeah I see do see why we'd want a Linux one, and we are currently
upstreaming dts for Linux. At the moment we don't have it so using
the firmware stage one fills the gap.
It is a little bit hacky maybe but I guess I'm not seeing where a
compatibility problem comes in versus other systems with their own
firmware DTB (that I assume a next-stage could similarly use and be
exposed to these issues if it did not supply its own).
Thanks,
Nick
next prev parent reply other threads:[~2026-05-05 6:01 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-25 13:17 [PATCH v4 00/13] hw/riscv: Add the Tenstorrent Atlantis machine Joel Stanley
2026-04-25 13:17 ` [PATCH v4 01/13] hw/i2c: Add designware i2c controller Joel Stanley
2026-04-30 3:53 ` Alistair Francis
2026-05-05 6:20 ` Nicholas Piggin
2026-05-05 7:36 ` Philippe Mathieu-Daudé
2026-05-06 5:58 ` Nicholas Piggin
2026-05-06 8:59 ` Philippe Mathieu-Daudé
2026-05-05 7:57 ` Philippe Mathieu-Daudé
2026-05-06 5:53 ` Nicholas Piggin
2026-05-06 8:55 ` Philippe Mathieu-Daudé
2026-04-25 13:17 ` [PATCH v4 02/13] hw/riscv/boot: Describe discontiguous memory in boot_info Joel Stanley
2026-04-25 13:17 ` [PATCH v4 03/13] hw/riscv/boot: Account for discontiguous memory when loading firmware Joel Stanley
2026-04-29 23:34 ` Alistair Francis
2026-05-04 23:45 ` Nicholas Piggin
2026-04-25 13:17 ` [PATCH v4 04/13] hw/riscv/boot: Provide a simple halting payload Joel Stanley
2026-04-29 23:35 ` Alistair Francis
2026-05-04 23:52 ` Nicholas Piggin
2026-05-05 8:06 ` Philippe Mathieu-Daudé
2026-05-07 1:53 ` Nicholas Piggin
2026-04-25 13:17 ` [PATCH v4 05/13] hw/riscv/virt: Move AIA initialisation to helper file Joel Stanley
2026-04-25 13:17 ` [PATCH v4 06/13] hw/riscv/aia: Provide number of irq sources Joel Stanley
2026-04-25 13:17 ` [PATCH v4 07/13] target/riscv: tt-ascalon: Enable Zkr extension Joel Stanley
2026-04-29 23:36 ` Alistair Francis
2026-05-05 0:06 ` Nicholas Piggin
2026-04-25 13:17 ` [PATCH v4 08/13] target/riscv: tt-ascalon: Enable Svadu by removing Svade Joel Stanley
2026-04-29 23:41 ` Alistair Francis
2026-04-25 13:17 ` [PATCH v4 09/13] hw/riscv: Add Tenstorrent Atlantis machine Joel Stanley
2026-04-29 23:57 ` Alistair Francis
2026-05-05 1:04 ` Nicholas Piggin
2026-05-05 4:34 ` Alistair Francis
2026-05-05 6:00 ` Nicholas Piggin [this message]
2026-05-05 7:31 ` Philippe Mathieu-Daudé
2026-05-06 3:14 ` Alistair Francis
2026-05-07 1:50 ` Nicholas Piggin
2026-05-07 2:53 ` Alistair Francis
2026-05-05 2:00 ` Nicholas Piggin
2026-05-05 4:36 ` Alistair Francis
2026-05-05 6:01 ` Nicholas Piggin
2026-04-25 13:17 ` [PATCH v4 10/13] hw/riscv/atlantis: Add PCIe controller Joel Stanley
2026-04-30 0:04 ` Alistair Francis
2026-05-05 1:38 ` Nicholas Piggin
2026-04-25 13:17 ` [PATCH v4 11/13] tests/functional/riscv64: Add tt-atlantis tests Joel Stanley
2026-04-25 13:17 ` [PATCH v4 12/13] hw/riscv/atlantis: Integrate i2c buses Joel Stanley
2026-04-25 13:17 ` [PATCH v4 13/13] hw/riscv/atlantis: Add some i2c peripherals Joel Stanley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=afl6x1CTIx2jvMH0@lima-default \
--to=npiggin@gmail.com \
--cc=alistair.francis@wdc.com \
--cc=alistair23@gmail.com \
--cc=asrinivasan@oss.tenstorrent.com \
--cc=chao.liu.zevorn@gmail.com \
--cc=daniel.barboza@oss.qualcomm.com \
--cc=jms@oss.tenstorrent.com \
--cc=joel@jms.id.au \
--cc=mpe@kernel.org \
--cc=philmd@linaro.org \
--cc=portias@oss.tenstorrent.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.