Skip to content
  • Simon Glass's avatar
    dm: core: Don't allow uclass use before ready · 1e9ced28
    Simon Glass authored
    
    
    At present it is possible to call uclass_get() before driver model is
    inited. In fact this happens on x86 boards which use Intel FSPv1, since
    mrccache_get_region() tries to get the SPI flash device very early
    during init.
    
    This has always been undefined behaviour. Previously it generally worked,
    i.e. returned an error code without crashing, because gd->uclass_root_s
    is zeroed and the uclass can be added despite driver model not being
    ready, due to the way lists are implemented. With the change to use a
    gd->uclass_root pointer, this no-longer works. For example, it causes a
    hang on minnowmax.
    
    Fix this by adding a check that driver model is ready when uclass_get() is
    called. This function is called in the process of locating any device, so
    it is a good place to add the check.
    
    This fixes booting on minnowmax.
    
    Signed-off-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    Fixes: 8a715530 ("dm: core: Allow the uclass list to move")
    1e9ced28