Skip to content

Commit 87c71dd

Browse files
committed
Merge tag 'soc-fixes-6.7-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull ARM SoC fixes from Arnd Bergmann: "There are only a handful of bugfixes this time, which feels almost too small, so I hope we are not missing something important. - One more mediatek dts warning fix after the previous larger set, this should finally result in a clean defconfig build. - TI OMAP dts fixes for a spurious hang on am335x and invalid data on DTA7 - One DTS fix for ethernet on Oriange Pi Zero (Allwinner H616) - A regression fix for ti-sysc interconnect target module driver to not access registers after reset if srst_udelay quirk is needed - Reset controller driver fixes for a crash during error handling and a build warning" * tag 'soc-fixes-6.7-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: arm64: dts: mediatek: mt8395-genio-1200-evk: add interrupt-parent for mt6360 ARM: dts: Fix occasional boot hang for am3 usb reset: Fix crash when freeing non-existent optional resets 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 reset: hisilicon: hi6220: fix Wvoid-pointer-to-enum-cast warning arm64: dts: allwinner: h616: update emac for Orange Pi Zero 3
2 parents 1bddd45 + fa3d6c7 commit 87c71dd

File tree

10 files changed

+32
-13
lines changed

10 files changed

+32
-13
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@
359359
<SYSC_IDLE_NO>,
360360
<SYSC_IDLE_SMART>,
361361
<SYSC_IDLE_SMART_WKUP>;
362+
ti,sysc-delay-us = <2>;
362363
clocks = <&l3s_clkctrl AM3_L3S_USB_OTG_HS_CLKCTRL 0>;
363364
clock-names = "fck";
364365
#address-cells = <1>;

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
}

arch/arm64/boot/dts/allwinner/sun50i-h616-orangepi-zero.dtsi

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,7 @@
6868
&emac0 {
6969
pinctrl-names = "default";
7070
pinctrl-0 = <&ext_rgmii_pins>;
71-
phy-mode = "rgmii";
7271
phy-handle = <&ext_rgmii_phy>;
73-
allwinner,rx-delay-ps = <3100>;
74-
allwinner,tx-delay-ps = <700>;
7572
status = "okay";
7673
};
7774

arch/arm64/boot/dts/allwinner/sun50i-h616-orangepi-zero2.dts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
};
1414

1515
&emac0 {
16+
allwinner,rx-delay-ps = <3100>;
17+
allwinner,tx-delay-ps = <700>;
18+
phy-mode = "rgmii";
1619
phy-supply = <&reg_dcdce>;
1720
};
1821

arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
};
1414

1515
&emac0 {
16+
allwinner,tx-delay-ps = <700>;
17+
phy-mode = "rgmii-rxid";
1618
phy-supply = <&reg_dldo1>;
1719
};
1820

arch/arm64/boot/dts/mediatek/mt8395-genio-1200-evk.dts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@
238238
mt6360: pmic@34 {
239239
compatible = "mediatek,mt6360";
240240
reg = <0x34>;
241+
interrupt-parent = <&pio>;
241242
interrupts = <128 IRQ_TYPE_EDGE_FALLING>;
242243
interrupt-names = "IRQB";
243244
interrupt-controller;

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

drivers/reset/core.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,9 @@ static void __reset_control_put_internal(struct reset_control *rstc)
807807
{
808808
lockdep_assert_held(&reset_list_mutex);
809809

810+
if (IS_ERR_OR_NULL(rstc))
811+
return;
812+
810813
kref_put(&rstc->refcnt, __reset_control_release);
811814
}
812815

@@ -1017,11 +1020,8 @@ EXPORT_SYMBOL_GPL(reset_control_put);
10171020
void reset_control_bulk_put(int num_rstcs, struct reset_control_bulk_data *rstcs)
10181021
{
10191022
mutex_lock(&reset_list_mutex);
1020-
while (num_rstcs--) {
1021-
if (IS_ERR_OR_NULL(rstcs[num_rstcs].rstc))
1022-
continue;
1023+
while (num_rstcs--)
10231024
__reset_control_put_internal(rstcs[num_rstcs].rstc);
1024-
}
10251025
mutex_unlock(&reset_list_mutex);
10261026
}
10271027
EXPORT_SYMBOL_GPL(reset_control_bulk_put);

drivers/reset/hisilicon/hi6220_reset.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ static int hi6220_reset_probe(struct platform_device *pdev)
163163
if (!data)
164164
return -ENOMEM;
165165

166-
type = (enum hi6220_reset_ctrl_type)of_device_get_match_data(dev);
166+
type = (uintptr_t)of_device_get_match_data(dev);
167167

168168
regmap = syscon_node_to_regmap(np);
169169
if (IS_ERR(regmap)) {

0 commit comments

Comments
 (0)