Hi Heinrich, On Wed, Dec 31, 2025 at 01:12:45PM +0100, Heinrich Schuchardt wrote: > On 12/30/25 17:01, Kuan-Wei Chiu wrote: > > Currently, the Goldfish RTC driver exclusively relies on device tree > > to retrieve the base address, failing immediately if dev_read_addr() > > returns FDT_ADDR_T_NONE. This restriction prevents the driver from > > being used on platforms that instantiate devices via U_BOOT_DRVINFO() > > instead of device tree, such as the QEMU m68k virt machine. > > > > Add support for platform data to address this limitation. Update the > > probe function to fall back to retrieving the base address from > > struct goldfish_rtc_plat if the device tree address is unavailable. > > Introduce a new header file include/goldfish_rtc.h to define the > > platform data structure. > > > > Signed-off-by: Kuan-Wei Chiu <[email protected]> > > --- > > Changes in v3: > > - New patch. > > > > It appears there is no specific maintainer listed for this driver? > > > > drivers/rtc/goldfish_rtc.c | 10 ++++++++-- > > include/goldfish_rtc.h | 15 +++++++++++++++ > > 2 files changed, 23 insertions(+), 2 deletions(-) > > create mode 100644 include/goldfish_rtc.h > > > > diff --git a/drivers/rtc/goldfish_rtc.c b/drivers/rtc/goldfish_rtc.c > > index e63a2766c76..900daabccb9 100644 > > --- a/drivers/rtc/goldfish_rtc.c > > +++ b/drivers/rtc/goldfish_rtc.c > > @@ -9,6 +9,7 @@ > > #include <div64.h> > > #include <dm.h> > > +#include <goldfish_rtc.h> > > #include <mapmem.h> > > #include <rtc.h> > > #include <linux/io.h> > > @@ -77,11 +78,16 @@ static int goldfish_rtc_set(struct udevice *dev, const > > struct rtc_time *time) > > static int goldfish_rtc_probe(struct udevice *dev) > > { > > struct goldfish_rtc *priv = dev_get_priv(dev); > > + struct goldfish_rtc_plat *plat; > > fdt_addr_t addr; > > addr = dev_read_addr(dev); > > - if (addr == FDT_ADDR_T_NONE) > > - return -EINVAL; > > + if (addr == FDT_ADDR_T_NONE) { > > + plat = dev_get_plat(dev); > > + if (!plat) > > + return -EINVAL; > > + addr = (fdt_addr_t)plat->base; > > addr is not a pointer, it is an address in the sandbox virtual memory > address space. This is why map_sysmem() is used below. > > The suggested code fails to build on sandbox_defconfig with the driver > enabled: > > drivers/rtc/goldfish_rtc.c: In function ‘goldfish_rtc_probe’: > drivers/rtc/goldfish_rtc.c:89:24: warning: cast from pointer to integer of > different size [-Wpointer-to-int-cast] > 89 | addr = (fdt_addr_t)plat->base; > | > > Please, use > > priv->base = plat->base; > > If plat->base is NULL, please, throw -EINVAL.
My apologies for the oversight. I agree with your suggestion. I will update the code to assign plat->base directly to priv->base in the next version. I will also verify the build with sandbox_defconfig to ensure there are no issues. Regards, Kuan-Wei

