[PATCH v2] gpio: Get rid of gpio_hog_probe_all()

Marek Vasut marex at denx.de
Thu Sep 22 16:29:30 CEST 2022


On 9/22/22 16:13, Quentin Schulz wrote:

[...]

> @@ -1503,9 +1480,26 @@ static int gpio_post_bind(struct udevice *dev)
>   								 &child);
>   				if (ret)
>   					return ret;
> +
> +				/*
> +				 * Make sure gpio-hogs are probed after bind
> +				 * since hogs can be essential to the hardware
> +				 * system.
> +				 */
> +				dev_or_flags(child, DM_FLAG_PROBE_AFTER_BIND);
> +
> +				/*
> +				 * Since gpio-hog is a U_BOOT_DRIVER and not
> +				 * a U_BOOT_CLASS, the DM core does not bind
> +				 * it and therefore it's up to this driver to
> +				 * set the DM_FLAG_PRE_RELOC appropriately.
> +				 */
> +				if (ofnode_pre_reloc(node))
> +					dev_or_flags(child, DM_FLAG_PRE_RELOC);


This second part should be handled by the DM, or you need dm-pre-reloc 
in your GPIO controller in DT. This would fail e.g. in case your GPIO 
controller has higher depth of hog subnodes, like:

gpio-controller {
   something {
     gpio-hog {
       u-boot,dm-pre-reloc;
     };
   };
};

Should really be:

gpio-controller {
   u-boot,dm-pre-reloc;
   something {
     u-boot,dm-pre-reloc;
     gpio-hog {
       u-boot,dm-pre-reloc;
     };
   };
};

At some point, I had the idea to instead of littering the DT with 
u-boot,dm-pre-reloc , we could use phandles instead and do something like:

/ {
  config {
   u-boot,dm-pre-reloc = <&node1 &node2 ... &gpio_hog ...>;
  };
}
...
gpio-controller {
   something {
     gpio_hog: gpio-hog {
     };
   };
};


More information about the U-Boot mailing list