Hello Simon,
On 28.09.26 16:45, Simon Glass wrote:
Hi Heiko,
On 2026-09-22T06:09:29, Heiko Schocher <[email protected]> wrote:
sandbox: spi: let a slave name the driver that emulates it
sandbox_sf_bind_emul() binds the SPI NOR flash emulator for every slave
on the sandbox SPI bus, whatever that slave is. There is no way to
emulate a different kind of SPI device, and a test for such a device
therefore cannot be written.
Take the name of the emulation driver from a "sandbox,emul" property on
the node of the slave, and fall back to the flash emulator when the
property is absent, so that every node in the test device tree today
keeps the emulation it has.
Signed-off-by: Heiko Schocher <[email protected]>
drivers/mtd/spi/sandbox.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/spi/sandbox.c b/drivers/mtd/spi/sandbox.c
@@ -518,6 +518,27 @@ static const struct dm_spi_emul_ops sandbox_sf_emul_ops = {
+static struct driver *sandbox_spi_emul_lookup(ofnode node)
+{
+ const char *name;
+
+ name = ofnode_read_string(node, "sandbox,emul");
+ if (!name)
+ name = "sandbox_sf_emul";
+
+ return lists_driver_lookup_name(name);
+}
The property name sandbox,emul is already in use - see
arch/sandbox/dts/sandbox.dtsi for i2c-eeprom, sandbox-rtc, the PMIC
and the swap-case device, and drivers/i2c/i2c-emul-uclass.c /
drivers/pci/pci-emul-uclass.c on the consumer side. Everywhere else it
is a phandle pointing at an emulation node whose compatible selects
the driver, and dtoc even hard-codes #emul-cells for it in
tools/dtoc/dtb_platdata.py. Reusing the same name for a string that
happens to be a U-Boot driver name will confuse anyone reading a
sandbox DT, and it bakes an implementation detail (the C symbol of the
driver) into the device tree. Please follow the I2C and PCI pattern:
put the emulation in its own node with the appropriate compatible, and
reference it here with sandbox,emul = <&spi_ram_emul>. Then
sandbox_spi_emul_lookup() resolves the phandle, binds the driver named
by its compatible, and there is no new schema to invent.
Ouch. Yes, I am not to deep in writing sandbox test. I try to rework
this part.
diff --git a/drivers/mtd/spi/sandbox.c b/drivers/mtd/spi/sandbox.c
@@ -530,9 +551,9 @@ int sandbox_sf_bind_emul(struct sandbox_state *state, int
busnum, int cs,
drv = lists_driver_lookup_name("sandbox_sf_emul");
if (!drv) {
- puts("Cannot find sandbox_sf_emul driver\n");
+ puts("Cannot find SPI emulation driver\n");
return -ENOENT;
}
Now that the name can come from the DT, the message should say which
driver was not found - otherwise a typo in sandbox,emul gives the
reader nothing to go on. Something like printf("Cannot find SPI
emulation driver '%s'\n", name) would help, which means passing the
resolved name back from the lookup helper.
Indeed, I try to rework.
Many thanks for your feedback and time!
bye,
Heiko
Regards,
Simon
--
Nabla Software Engineering
HRB 40522 Augsburg
Phone: +49 821 45592596
E-Mail: [email protected]
Geschäftsführer : Stefano Babic