mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-17 22:49:02 +00:00
firmware: zynqmp: Probe driver before use
Probe the driver before use to ensure that the driver is always available and the global data are valid. Initialize the global data with zero and probe the driver if the global data are still zero. This allows a usage of the firmware functions from other drivers with arbitrary order between the drivers. Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com> Link: https://lore.kernel.org/r/20220620163650.18756-2-stefan.herbrechtsmeier-oss@weidmueller.com Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
parent
fe7090c702
commit
f851be15f4
1 changed files with 20 additions and 3 deletions
|
@ -26,7 +26,7 @@
|
|||
struct zynqmp_power {
|
||||
struct mbox_chan tx_chan;
|
||||
struct mbox_chan rx_chan;
|
||||
} zynqmp_power;
|
||||
} zynqmp_power = {};
|
||||
|
||||
#define NODE_ID_LOCATION 5
|
||||
|
||||
|
@ -79,6 +79,20 @@ int zynqmp_pmufw_node(u32 id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int do_pm_probe(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
ret = uclass_get_device_by_driver(UCLASS_FIRMWARE,
|
||||
DM_DRIVER_GET(zynqmp_power),
|
||||
&dev);
|
||||
if (ret)
|
||||
debug("%s: Probing device failed: %d\n", __func__, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen)
|
||||
{
|
||||
struct zynqmp_ipi_msg msg;
|
||||
|
@ -92,8 +106,11 @@ static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen)
|
|||
res_maxlen > PMUFW_PAYLOAD_ARG_CNT)
|
||||
return -EINVAL;
|
||||
|
||||
if (!(zynqmp_power.tx_chan.dev) || !(zynqmp_power.rx_chan.dev))
|
||||
return -EINVAL;
|
||||
if (!(zynqmp_power.tx_chan.dev) || !(zynqmp_power.rx_chan.dev)) {
|
||||
ret = do_pm_probe();
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
debug("%s, Sending IPI message with ID: 0x%0x\n", __func__, req[0]);
|
||||
msg.buf = (u32 *)req;
|
||||
|
|
Loading…
Add table
Reference in a new issue