Re: [PATCH 1/3] phy: rockchip: emmc: Enable pulldown for strobe line

From: Conor Dooley
Date: Tue Mar 26 2024 - 15:46:15 EST


On Tue, Mar 26, 2024 at 07:54:35PM +0100, Folker Schwesinger via B4 Relay wrote:
> From: Folker Schwesinger <dev@xxxxxxxxxxxxxxxxxxxxx>
>
> Restore the behavior of the Rockchip kernel that undconditionally
> enables the internal strobe pulldown.

What do you mean "restore the behaviour of the rockchip kernel"? Did
mainline behave the same as the rockchip kernel previously? If not,
using "restore" here is misleading. "Unconditionally" is also incorrect,
because you have a property that disables it.

> As the DT property rockchip,enable-strobe-pulldown is obsolete now,
> replace it with a property to disable the internal pulldown.
>
> This fixes I/O errors observed on various Rock Pi 4 and NanoPi4 series
> boards with some eMMC modules. Other boards may also be affected.
>
> An example of these errors is as follows:
>
> [ 290.060817] mmc1: running CQE recovery
> [ 290.061337] blk_update_request: I/O error, dev mmcblk1, sector 1411072 op 0x1:(WRITE) flags 0x800 phys_seg 36 prio class 0
> [ 290.061370] EXT4-fs warning (device mmcblk1p1): ext4_end_bio:348: I/O error 10 writing to inode 29547 starting block 176466)
> [ 290.061484] Buffer I/O error on device mmcblk1p1, logical block 172288
>
> Fixes: 8b5c2b45b8f0 ("phy: rockchip: set pulldown for strobe line in dts")
> Signed-off-by: Folker Schwesinger <dev@xxxxxxxxxxxxxxxxxxxxx>
> ---
> drivers/phy/rockchip/phy-rockchip-emmc.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c
> index 20023f6eb994..6e637f3e1b19 100644
> --- a/drivers/phy/rockchip/phy-rockchip-emmc.c
> +++ b/drivers/phy/rockchip/phy-rockchip-emmc.c
> @@ -376,14 +376,14 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
> rk_phy->reg_offset = reg_offset;
> rk_phy->reg_base = grf;
> rk_phy->drive_impedance = PHYCTRL_DR_50OHM;
> - rk_phy->enable_strobe_pulldown = PHYCTRL_REN_STRB_DISABLE;
> + rk_phy->enable_strobe_pulldown = PHYCTRL_REN_STRB_ENABLE;
> rk_phy->output_tapdelay_select = PHYCTRL_OTAPDLYSEL_DEFAULT;
>
> if (!of_property_read_u32(dev->of_node, "drive-impedance-ohm", &val))
> rk_phy->drive_impedance = convert_drive_impedance_ohm(pdev, val);
>
> - if (of_property_read_bool(dev->of_node, "rockchip,enable-strobe-pulldown"))
> - rk_phy->enable_strobe_pulldown = PHYCTRL_REN_STRB_ENABLE;
> + if (of_property_read_bool(dev->of_node, "rockchip,disable-strobe-pulldown"))
> + rk_phy->enable_strobe_pulldown = PHYCTRL_REN_STRB_DISABLE;

Unfortunately you cannot do this.
Previously no property at all meant disabled and a property was required
to enable it. With this change the absence of a property means that it
will be enabled.
An old devicetree is that wanted this to be disabled would have no
property and will now end up with it enabled. This is an ABI break and is
clearly not backwards compatible, that's a NAK unless it is demonstrable
that noone actually wants to disable it at all.

If this patch fixes a problem on a board that you have, I would suggest
that you add the property to enable it, as the binding tells you to.

Thanks,
Conor.

> if (!of_property_read_u32(dev->of_node, "rockchip,output-tapdelay-select", &val)) {
> if (val <= PHYCTRL_OTAPDLYSEL_MAXVALUE)
>
> --
> 2.44.0
>
>

Attachment: signature.asc
Description: PGP signature