Skip to content

Commit 3c7f58b

Browse files
committed
Merge tag 'omap-for-v5.15/fixes-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into arm/fixes
Fixes for omaps for v5.15 Few regression fixes for omaps for the v5.15-rc cycle. There is a fix for boot time hangs that can happen on some am335x devices that started when the pruss devicetree nodes were added. The other fixes are less critical: - Fix compiler warning for sysc_init_soc() that got recently introduced - Fix external abort for am335x pruss as otherwise some am335x will hang - Use CLKDM_NOAUTO quirk also for dra7 dcan1 - Fix older NAND device node regression for omap3-sdp * tag 'omap-for-v5.15/fixes-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: ARM: dts: omap3430-sdp: Fix NAND device node bus: ti-sysc: Use CLKDM_NOAUTO for dra7 dcan1 for errata i893 soc: ti: omap-prm: Fix external abort for am335x pruss bus: ti-sysc: Add break in switch statement in sysc_init_soc() Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Arnd Bergmann <[email protected]>
2 parents 2250596 + 80d680f commit 3c7f58b

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

arch/arm/boot/dts/omap3430-sdp.dts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101

102102
nand@1,0 {
103103
compatible = "ti,omap2-nand";
104-
reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
104+
reg = <1 0 4>; /* CS1, offset 0, IO size 4 */
105105
interrupt-parent = <&gpmc>;
106106
interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
107107
<1 IRQ_TYPE_NONE>; /* termcount */

arch/arm/mach-omap2/omap_hwmod.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3614,6 +3614,8 @@ int omap_hwmod_init_module(struct device *dev,
36143614
oh->flags |= HWMOD_SWSUP_SIDLE_ACT;
36153615
if (data->cfg->quirks & SYSC_QUIRK_SWSUP_MSTANDBY)
36163616
oh->flags |= HWMOD_SWSUP_MSTANDBY;
3617+
if (data->cfg->quirks & SYSC_QUIRK_CLKDM_NOAUTO)
3618+
oh->flags |= HWMOD_CLKDM_NOAUTO;
36173619

36183620
error = omap_hwmod_check_module(dev, oh, data, sysc_fields,
36193621
rev_offs, sysc_offs, syss_offs,

drivers/bus/ti-sysc.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,6 +1464,9 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
14641464
/* Quirks that need to be set based on detected module */
14651465
SYSC_QUIRK("aess", 0, 0, 0x10, -ENODEV, 0x40000000, 0xffffffff,
14661466
SYSC_MODULE_QUIRK_AESS),
1467+
/* Errata i893 handling for dra7 dcan1 and 2 */
1468+
SYSC_QUIRK("dcan", 0x4ae3c000, 0x20, -ENODEV, -ENODEV, 0xa3170504, 0xffffffff,
1469+
SYSC_QUIRK_CLKDM_NOAUTO),
14671470
SYSC_QUIRK("dcan", 0x48480000, 0x20, -ENODEV, -ENODEV, 0xa3170504, 0xffffffff,
14681471
SYSC_QUIRK_CLKDM_NOAUTO),
14691472
SYSC_QUIRK("dss", 0x4832a000, 0, 0x10, 0x14, 0x00000020, 0xffffffff,
@@ -2954,6 +2957,7 @@ static int sysc_init_soc(struct sysc *ddata)
29542957
break;
29552958
case SOC_AM3:
29562959
sysc_add_disabled(0x48310000); /* rng */
2960+
break;
29572961
default:
29582962
break;
29592963
}

drivers/soc/ti/omap_prm.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -825,25 +825,28 @@ static int omap_reset_deassert(struct reset_controller_dev *rcdev,
825825
writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl);
826826
spin_unlock_irqrestore(&reset->lock, flags);
827827

828-
if (!has_rstst)
829-
goto exit;
828+
/* wait for the reset bit to clear */
829+
ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
830+
reset->prm->data->rstctrl,
831+
v, !(v & BIT(id)), 1,
832+
OMAP_RESET_MAX_WAIT);
833+
if (ret)
834+
pr_err("%s: timedout waiting for %s:%lu\n", __func__,
835+
reset->prm->data->name, id);
830836

831837
/* wait for the status to be set */
832-
ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
838+
if (has_rstst) {
839+
ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
833840
reset->prm->data->rstst,
834841
v, v & BIT(st_bit), 1,
835842
OMAP_RESET_MAX_WAIT);
836-
if (ret)
837-
pr_err("%s: timedout waiting for %s:%lu\n", __func__,
838-
reset->prm->data->name, id);
843+
if (ret)
844+
pr_err("%s: timedout waiting for %s:%lu\n", __func__,
845+
reset->prm->data->name, id);
846+
}
839847

840-
exit:
841-
if (reset->clkdm) {
842-
/* At least dra7 iva needs a delay before clkdm idle */
843-
if (has_rstst)
844-
udelay(1);
848+
if (reset->clkdm)
845849
pdata->clkdm_allow_idle(reset->clkdm);
846-
}
847850

848851
return ret;
849852
}

0 commit comments

Comments
 (0)