diff --git a/drivers/platform/tegra/nvadsp/dev.c b/drivers/platform/tegra/nvadsp/dev.c index a9f505b0..cd3a5ed9 100644 --- a/drivers/platform/tegra/nvadsp/dev.c +++ b/drivers/platform/tegra/nvadsp/dev.c @@ -296,6 +296,9 @@ static int __init nvadsp_parse_dt(struct platform_device *pdev) of_property_read_u32(dev->of_node, "nvidia,tegra_platform", &drv_data->tegra_platform); + of_property_read_u32(dev->of_node, "nvidia,adsp_load_timeout", + &drv_data->adsp_load_timeout); + if (drv_data->adsp_unit_fpga) { for (iter = 0; iter < ADSP_UNIT_FPGA_RESET_END; iter++) { if (of_property_read_u32_index(dev->of_node, diff --git a/drivers/platform/tegra/nvadsp/dev.h b/drivers/platform/tegra/nvadsp/dev.h index f05cd10d..de77c9f9 100644 --- a/drivers/platform/tegra/nvadsp/dev.h +++ b/drivers/platform/tegra/nvadsp/dev.h @@ -241,6 +241,9 @@ struct nvadsp_drv_data { /* enum tegra_platform */ u32 tegra_platform; + + /* "nvidia,adsp_load_timeout" (in ms) */ + u32 adsp_load_timeout; }; #define ADSP_CONFIG 0x04 diff --git a/drivers/platform/tegra/nvadsp/os.c b/drivers/platform/tegra/nvadsp/os.c index da1356ba..122e56cd 100644 --- a/drivers/platform/tegra/nvadsp/os.c +++ b/drivers/platform/tegra/nvadsp/os.c @@ -1221,11 +1221,16 @@ end: static int wait_for_adsp_os_load_complete(void) { struct device *dev = &priv.pdev->dev; - uint32_t data; + struct nvadsp_drv_data *drv_data = platform_get_drvdata(priv.pdev); + uint32_t timeout, data; status_t ret; + timeout = drv_data->adsp_load_timeout; + if (!timeout) + timeout = ADSP_OS_LOAD_TIMEOUT; + ret = nvadsp_mbox_recv(&adsp_com_mbox, &data, - true, ADSP_OS_LOAD_TIMEOUT); + true, timeout); if (ret) { dev_err(dev, "ADSP OS loading timed out\n"); goto end;