Skip to content

Commit 2096d3e

Browse files
committed
Merge tag 'omap-for-v6.7/fixes-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into arm/fixes
Fixes for omaps A few fixes for omaps: - A regression fix for ti-sysc interconnect target module driver to not access registers after reset if srst_udelay quirk is needed - DRA7 L3 NoC node register size fix * tag 'omap-for-v6.7/fixes-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: ARM: OMAP2+: Fix null pointer dereference and memory leak in omap_soc_device_init ARM: dts: dra7: Fix DRA7 L3 NoC node register size bus: ti-sysc: Flush posted write only after srst_udelay Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Arnd Bergmann <[email protected]>
2 parents d73ad79 + c72b9c3 commit 2096d3e

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

arch/arm/boot/dts/ti/omap/dra7.dtsi

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

148148
l3-noc@44000000 {
149149
compatible = "ti,dra7-l3-noc";
150-
reg = <0x44000000 0x1000>,
150+
reg = <0x44000000 0x1000000>,
151151
<0x45000000 0x1000>;
152152
interrupts-extended = <&crossbar_mpu GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
153153
<&wakeupgen GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;

arch/arm/mach-omap2/id.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,11 +793,16 @@ void __init omap_soc_device_init(void)
793793

794794
soc_dev_attr->machine = soc_name;
795795
soc_dev_attr->family = omap_get_family();
796+
if (!soc_dev_attr->family) {
797+
kfree(soc_dev_attr);
798+
return;
799+
}
796800
soc_dev_attr->revision = soc_rev;
797801
soc_dev_attr->custom_attr_group = omap_soc_groups[0];
798802

799803
soc_dev = soc_device_register(soc_dev_attr);
800804
if (IS_ERR(soc_dev)) {
805+
kfree(soc_dev_attr->family);
801806
kfree(soc_dev_attr);
802807
return;
803808
}

drivers/bus/ti-sysc.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2158,13 +2158,23 @@ static int sysc_reset(struct sysc *ddata)
21582158
sysc_val = sysc_read_sysconfig(ddata);
21592159
sysc_val |= sysc_mask;
21602160
sysc_write(ddata, sysc_offset, sysc_val);
2161-
/* Flush posted write */
2161+
2162+
/*
2163+
* Some devices need a delay before reading registers
2164+
* after reset. Presumably a srst_udelay is not needed
2165+
* for devices that use a rstctrl register reset.
2166+
*/
2167+
if (ddata->cfg.srst_udelay)
2168+
fsleep(ddata->cfg.srst_udelay);
2169+
2170+
/*
2171+
* Flush posted write. For devices needing srst_udelay
2172+
* this should trigger an interconnect error if the
2173+
* srst_udelay value is needed but not configured.
2174+
*/
21622175
sysc_val = sysc_read_sysconfig(ddata);
21632176
}
21642177

2165-
if (ddata->cfg.srst_udelay)
2166-
fsleep(ddata->cfg.srst_udelay);
2167-
21682178
if (ddata->post_reset_quirk)
21692179
ddata->post_reset_quirk(ddata);
21702180

0 commit comments

Comments
 (0)