Skip to content

Commit 36b6dcb

Browse files
committed
Merge tag 'reset-fixes-for-v5.15' of git://git.pengutronix.de/pza/linux into arm/fixes
Reset controller fixes for v5.15 Fix the status bit polarity in the brcmstb-rescal driver, re-enable pistachio driver selection after MACH_PISTACHIO removal, add transfer error handling in the tegra-bpmp driver, and fix probing of the reset-socfpga driver after recent device link changes. * tag 'reset-fixes-for-v5.15' of git://git.pengutronix.de/pza/linux: reset: socfpga: add empty driver allowing consumers to probe reset: tegra-bpmp: Handle errors in BPMP response reset: pistachio: Re-enable driver selection reset: brcmstb-rescal: fix incorrect polarity of status bit Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Arnd Bergmann <[email protected]>
2 parents e23c748 + 3ad60b4 commit 36b6dcb

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

drivers/reset/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ config RESET_OXNAS
147147
bool
148148

149149
config RESET_PISTACHIO
150-
bool "Pistachio Reset Driver" if COMPILE_TEST
151-
default MACH_PISTACHIO
150+
bool "Pistachio Reset Driver"
151+
depends on MIPS || COMPILE_TEST
152152
help
153153
This enables the reset driver for ImgTec Pistachio SoCs.
154154

drivers/reset/reset-brcmstb-rescal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ static int brcm_rescal_reset_set(struct reset_controller_dev *rcdev,
3838
}
3939

4040
ret = readl_poll_timeout(base + BRCM_RESCAL_STATUS, reg,
41-
!(reg & BRCM_RESCAL_STATUS_BIT), 100, 1000);
41+
(reg & BRCM_RESCAL_STATUS_BIT), 100, 1000);
4242
if (ret) {
4343
dev_err(data->dev, "time out on SATA/PCIe rescal\n");
4444
return ret;

drivers/reset/reset-socfpga.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,29 @@ void __init socfpga_reset_init(void)
9292
for_each_matching_node(np, socfpga_early_reset_dt_ids)
9393
a10_reset_init(np);
9494
}
95+
96+
/*
97+
* The early driver is problematic, because it doesn't register
98+
* itself as a driver. This causes certain device links to prevent
99+
* consumer devices from probing. The hacky solution is to register
100+
* an empty driver, whose only job is to attach itself to the reset
101+
* manager and call probe.
102+
*/
103+
static const struct of_device_id socfpga_reset_dt_ids[] = {
104+
{ .compatible = "altr,rst-mgr", },
105+
{ /* sentinel */ },
106+
};
107+
108+
static int reset_simple_probe(struct platform_device *pdev)
109+
{
110+
return 0;
111+
}
112+
113+
static struct platform_driver reset_socfpga_driver = {
114+
.probe = reset_simple_probe,
115+
.driver = {
116+
.name = "socfpga-reset",
117+
.of_match_table = socfpga_reset_dt_ids,
118+
},
119+
};
120+
builtin_platform_driver(reset_socfpga_driver);

drivers/reset/tegra/reset-bpmp.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
2020
struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
2121
struct mrq_reset_request request;
2222
struct tegra_bpmp_message msg;
23+
int err;
2324

2425
memset(&request, 0, sizeof(request));
2526
request.cmd = command;
@@ -30,7 +31,13 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
3031
msg.tx.data = &request;
3132
msg.tx.size = sizeof(request);
3233

33-
return tegra_bpmp_transfer(bpmp, &msg);
34+
err = tegra_bpmp_transfer(bpmp, &msg);
35+
if (err)
36+
return err;
37+
if (msg.rx.ret)
38+
return -EINVAL;
39+
40+
return 0;
3441
}
3542

3643
static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,

0 commit comments

Comments
 (0)