This pull request contains Broadcom SoCs driver fixes for 6.0, please
pull the following: - Liang fixes the legacy Broadcom STB ARM system suspend/resume code error paths that were leaking ioremap() and other of_* operations -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEm+Rq3+YGJdiR9yuFh9CWnEQHBwQFAmMNQmsACgkQh9CWnEQH BwTjKxAAqAvlmkOjVnJxrxEv53bXxPU+lHqTacMm5O8OmP5+EpxbSSFXLtICAnaL 8VFAPKhwrX6xkJr0asv6oUaxf2oSWMXixjSIW8uxlZQl+R9cU9FWq7piyaxytpBQ aRHRSKQBTi3IHW5+ZcohRdKwhNzBqtcbeSPdQF2A/vSEp7Na9Aite5iW2Sd4o9Wz oP/uxZFKZGvKB7Zcn9Yq57G6wUVoAHw3Ny5hfmbVOC8UMNr3XJdpK+2jtJZV2YmR l8Y6olU0/bz6dLQgJoASpM8EW4dtVvD+TDF9EjdQgICG6h0RDaO6uRAAGAHqifzo 6BH151L22F6YC2DQn3TXgRse0bFaXxRo07UYNx8S8xKnw4/iG36aoEU2o/WAKshF FMrx9Kmh//ih6oFaTnWa8/R4f7zQXWuPNFdUpMltGwhIPRV6HIzloYFRx7ekPc4q gNgcc48cTDKLmzd8eMworX2TK1s2oKCMKW0KTZv1PTrTgHoUOE088QUDDjtXuKK5 VXSxsmhr2CUG+EBsH5rInHi9KszNfE0FpHfKQ9iaao6OhMSPeUq7StLh80ZctxFu ufTwDX0SEc9ipPow4T2f6jOTy7x0E2gHj7zKfc5kjx0vME3E9/bUsROzDN5vmlb2 TV+qSa0q0jkZezATB+m1x1rO5Hw9d46X39R2Ew94W4vlr/M5ebk= =ORKq -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmMRzH8ACgkQmmx57+YA GNn6uhAAjh/j+zAZzqYPCWtd0zR6GaFodCwYxLJFH+Z6r/vy2PIdY6+BHZPA7E6L 2j9i2YYMCz79PhO24DpMIWfEBVaZ0Y6/Fg+ip15OpOeuVSCX0sAEtE7cevapuqeu sqyNLQQ8quWltjyLfIfaAYh7yDrTr3DjxUkS43nhaLplfWvB/N4uxFeGZ3X2aRI1 bWh2bCJvkrsd9+FQn9UDP0QA2YGnCWrkE66SkZsxh2o86x7VC5f/XBfns8rZNnoc bx32nO2YQ5Rahbz8j+it+pYGpO5JZT/Hy0wOeMimJt0L76HI4WoB589a7urW4+y4 NXTizlfkBJ3HlnD9WhlRCydWVDQz3xQ/TkaerM5IGyfS9QmlOITFz/BxoVL4DmgZ pL/zPJjffsZEt0f5om5767Fk267kgrvgmlHsRA9gRAqNNgHkpNYNEinqzUkIhCtx 1QTr9KNRBFu43/eIx+t50nHoc/Jg1SL9YLD0VKfTsItn1LM4eMfV92F+WGP9wL6b OSJuicRoIXQ6X+8rdXE7/ZXc9aVuA6SNNgRHwdY+4MtyZgRGWC3sbAJ1tb1RITbr XoJVlG6vDg0XzFlWYeNCbufgePY2yXhVVP8QwojNt+926pGNvL07fpUl2pGBxV7M FQumq1l/QVJeYDL728/YX2Bk2/kXWZrO/HEYttJypg81xQ/Y7iw= =YiX2 -----END PGP SIGNATURE----- Merge tag 'arm-soc/for-6.0/drivers-fixes' of https://github.com/Broadcom/stblinux into arm/fixes This pull request contains Broadcom SoCs driver fixes for 6.0, please pull the following: - Liang fixes the legacy Broadcom STB ARM system suspend/resume code error paths that were leaking ioremap() and other of_* operations * tag 'arm-soc/for-6.0/drivers-fixes' of https://github.com/Broadcom/stblinux: soc: brcmstb: pm-arm: Fix refcount leak and __iomem leak bugs Link: https://lore.kernel.org/r/20220829225103.753223-2-f.fainelli@gmail.com Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
49f6d09bd0
|
@ -684,13 +684,14 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
const struct of_device_id *of_id = NULL;
|
||||
struct device_node *dn;
|
||||
void __iomem *base;
|
||||
int ret, i;
|
||||
int ret, i, s;
|
||||
|
||||
/* AON ctrl registers */
|
||||
base = brcmstb_ioremap_match(aon_ctrl_dt_ids, 0, NULL);
|
||||
if (IS_ERR(base)) {
|
||||
pr_err("error mapping AON_CTRL\n");
|
||||
return PTR_ERR(base);
|
||||
ret = PTR_ERR(base);
|
||||
goto aon_err;
|
||||
}
|
||||
ctrl.aon_ctrl_base = base;
|
||||
|
||||
|
@ -700,8 +701,10 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
/* Assume standard offset */
|
||||
ctrl.aon_sram = ctrl.aon_ctrl_base +
|
||||
AON_CTRL_SYSTEM_DATA_RAM_OFS;
|
||||
s = 0;
|
||||
} else {
|
||||
ctrl.aon_sram = base;
|
||||
s = 1;
|
||||
}
|
||||
|
||||
writel_relaxed(0, ctrl.aon_sram + AON_REG_PANIC);
|
||||
|
@ -711,7 +714,8 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
(const void **)&ddr_phy_data);
|
||||
if (IS_ERR(base)) {
|
||||
pr_err("error mapping DDR PHY\n");
|
||||
return PTR_ERR(base);
|
||||
ret = PTR_ERR(base);
|
||||
goto ddr_phy_err;
|
||||
}
|
||||
ctrl.support_warm_boot = ddr_phy_data->supports_warm_boot;
|
||||
ctrl.pll_status_offset = ddr_phy_data->pll_status_offset;
|
||||
|
@ -731,17 +735,20 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
for_each_matching_node(dn, ddr_shimphy_dt_ids) {
|
||||
i = ctrl.num_memc;
|
||||
if (i >= MAX_NUM_MEMC) {
|
||||
of_node_put(dn);
|
||||
pr_warn("too many MEMCs (max %d)\n", MAX_NUM_MEMC);
|
||||
break;
|
||||
}
|
||||
|
||||
base = of_io_request_and_map(dn, 0, dn->full_name);
|
||||
if (IS_ERR(base)) {
|
||||
of_node_put(dn);
|
||||
if (!ctrl.support_warm_boot)
|
||||
break;
|
||||
|
||||
pr_err("error mapping DDR SHIMPHY %d\n", i);
|
||||
return PTR_ERR(base);
|
||||
ret = PTR_ERR(base);
|
||||
goto ddr_shimphy_err;
|
||||
}
|
||||
ctrl.memcs[i].ddr_shimphy_base = base;
|
||||
ctrl.num_memc++;
|
||||
|
@ -752,14 +759,18 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
for_each_matching_node(dn, brcmstb_memc_of_match) {
|
||||
base = of_iomap(dn, 0);
|
||||
if (!base) {
|
||||
of_node_put(dn);
|
||||
pr_err("error mapping DDR Sequencer %d\n", i);
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto brcmstb_memc_err;
|
||||
}
|
||||
|
||||
of_id = of_match_node(brcmstb_memc_of_match, dn);
|
||||
if (!of_id) {
|
||||
iounmap(base);
|
||||
return -EINVAL;
|
||||
of_node_put(dn);
|
||||
ret = -EINVAL;
|
||||
goto brcmstb_memc_err;
|
||||
}
|
||||
|
||||
ddr_seq_data = of_id->data;
|
||||
|
@ -779,21 +790,24 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
dn = of_find_matching_node(NULL, sram_dt_ids);
|
||||
if (!dn) {
|
||||
pr_err("SRAM not found\n");
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto brcmstb_memc_err;
|
||||
}
|
||||
|
||||
ret = brcmstb_init_sram(dn);
|
||||
of_node_put(dn);
|
||||
if (ret) {
|
||||
pr_err("error setting up SRAM for PM\n");
|
||||
return ret;
|
||||
goto brcmstb_memc_err;
|
||||
}
|
||||
|
||||
ctrl.pdev = pdev;
|
||||
|
||||
ctrl.s3_params = kmalloc(sizeof(*ctrl.s3_params), GFP_KERNEL);
|
||||
if (!ctrl.s3_params)
|
||||
return -ENOMEM;
|
||||
if (!ctrl.s3_params) {
|
||||
ret = -ENOMEM;
|
||||
goto s3_params_err;
|
||||
}
|
||||
ctrl.s3_params_pa = dma_map_single(&pdev->dev, ctrl.s3_params,
|
||||
sizeof(*ctrl.s3_params),
|
||||
DMA_TO_DEVICE);
|
||||
|
@ -813,7 +827,21 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
|
|||
|
||||
out:
|
||||
kfree(ctrl.s3_params);
|
||||
s3_params_err:
|
||||
iounmap(ctrl.boot_sram);
|
||||
brcmstb_memc_err:
|
||||
for (i--; i >= 0; i--)
|
||||
iounmap(ctrl.memcs[i].ddr_ctrl);
|
||||
ddr_shimphy_err:
|
||||
for (i = 0; i < ctrl.num_memc; i++)
|
||||
iounmap(ctrl.memcs[i].ddr_shimphy_base);
|
||||
|
||||
iounmap(ctrl.memcs[0].ddr_phy_base);
|
||||
ddr_phy_err:
|
||||
iounmap(ctrl.aon_ctrl_base);
|
||||
if (s)
|
||||
iounmap(ctrl.aon_sram);
|
||||
aon_err:
|
||||
pr_warn("PM: initialization failed with code %d\n", ret);
|
||||
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue