From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 439BB286A7 for ; Thu, 23 Jul 2026 00:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765533; cv=none; b=Gkjeb0UGLD1cg9NWRM4w6COIBHAvEni00pbN+lew/2ymMS+6uBodK0ebgvvlWPtuHCe53fIQw+d0TId5O6s39bqlTHRUqL/NiGAHJLvxoGDC6hoDWttVWxMtB19qFNBKdVwcQk7bdyYsYBI3BBxTHA4owzvFID2FeSG3P0acasc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765533; c=relaxed/simple; bh=6gQ8RELPs7kXsn5PgGweUn+iDbo9LuwS+5snvrITUDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cC/3VFMMnQ1r+swmyDbaoallMCTvj8SBChmHc+xInwZ6HO3TCfqMSpk1Csix7Yumjm1cWhkUWJEWy/svOVly4dZS95FgVylMW1LV+HY04GFD6PADUFEOIc2Pbcbcq/1ubxv+2OMYu9ejMlGsf9lszMN6yJhDIdg7neg02uDD59U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SDEoySSv; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SDEoySSv" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-8453427d3f4so44428b3a.3 for ; Wed, 22 Jul 2026 17:12:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784765531; x=1785370331; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=G2Juw97uYRh2DZVmJAt88/3mh1lYhmOIkr6Mu093zTI=; b=SDEoySSvU5BBdMM4vOSviMrAauT/C1RL3o5TIKbNf/bOFaSlHSXMncdrr33+Qjxoti My45POJioo3PFCdBp0KAf2HGai1JXgStwK8xx7QwKlupZUjXGtEyTqYfLdNnm+A5oMcy 3km+nUgtDFoc5vVzeyEX26Nr3J1JwGKdUHCOgjIZjyDe42zHZN/owGeT7rbqcROAI/Oq b8qY0wpu7QjcuXYQhAgrWxw+boSstcft3l0jEhkS+dDyh3P3L2zn4SOSGMaPr3wi5xjR jDgBg/UZXb8Qsp3ekqXFfA3YaIf1ZBNeRbvLYRxymGFWGGy3Mc7KkwPBFZg6tE33/R7U t95Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784765531; x=1785370331; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=G2Juw97uYRh2DZVmJAt88/3mh1lYhmOIkr6Mu093zTI=; b=ZLd+cMPiOPDkvmW+hdyxL4ZyBczcWVHKwsX+FXDjHi6cS1p746Jrb+Gavf6gwDw+8d wOlhC/fniAfi4BxnahebzAZ6p4lLaxNOT2HZzHP7aHGIyXbZA8jqEJJfX9Q9+Ur4RM6B aGwJxXGSe/huenPh85/5r0OwpMr4HodWOOwNnYejc1uD/5MmUdJm7cCxY9UGgj3tyPeE oTdpLSA3ayxG3r9dAFdcby2X6bw9u+B/oEBIjTgoT6gvs3UI2syyaQ9bKkrIahnSVGuD PQER5QpS9Whf4S2xJOJJMvcWS8KLCPrluEYgut9LhW2SAbD0O/F492zcRWw2F34hxgzx +DzA== X-Forwarded-Encrypted: i=1; AHgh+RoTx9pn2qI2eIM9Y1qYDxGj9ECqBc4kVP56PYbdqHq+MA/r9erE5bXQADu/77l4ZtDLnw+Y0rJaVfkJUHc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2Lkn+rf9v+UIn/LTA/zYvB9ztsgwvtJCBN6hiGEdO+AYdnwZM X/13DSgj+jAWhODZ817H5SadWhZgUHYuYtxTAUY1y5KiZsORdve07pGd X-Gm-Gg: AR+sD10Wlhql7c1rsWs0+AFpCRbxUyHlfImwk3xxBMj/uvD7t3r/3SkIXoPKJc9/izU QkVuGbE/xJmqI82AM91qnULpcazgprSvb9k9Okq/HmvWOy7bnLRcuQjc6+ZfDGqAnCJbFiIO+4E 4lYmYyYxMDl3TH0tqTHPmv+AWMsKW2CyCZIWBwSiM6aDoS0XusibXIPF0JhJqmPI+Z0Vyayc+ET fZ7+p/VvTDM302gD4SggXEmPxvMmIpx1lQcehgk7qxNJ+nmmxqxtUKEepnbvX6owheGNzEqLZzC elywiP1t/s9jv6e/NXfU72RrcCdDVItfqYr5E882GgJ0uDtN9NFFGMGSUMxWhDefXoxDl975JNC Ht6993SQOrz3uNRKm79A4ylbWg0yliEAS07xFIRbAlpAmJ9mp8R+BRzMNB3iPKy0p8hre97mTba tyr75lG2mtAwB4w5uvGwDWPanlAEU9wHuB2UVJ4BpRxkQelgDYeigIe7Np2s2y7LHpgiUCUcOjD 7ClniHBOfHGFROJ0BplI/tRcxARniOGef7B4WS9963Jtn+Cu8eDkww= X-Received: by 2002:a05:6a00:e88:b0:847:b16b:46d9 with SMTP id d2e1a72fcca58-84e2b8aa77bmr1119696b3a.34.1784765531462; Wed, 22 Jul 2026 17:12:11 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84e1760025esm2037253b3a.57.2026.07.22.17.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 17:12:10 -0700 (PDT) From: Rosen Penev To: linux-ide@vger.kernel.org Cc: Damien Le Moal , Niklas Cassel , Tejun Heo , Mans Rullgard , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/3] ata: sata_dwc_460ex: fix PHY lifecycle ordering on device removal Date: Wed, 22 Jul 2026 17:12:06 -0700 Message-ID: <20260723001208.1469323-2-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260723001208.1469323-1-rosenp@gmail.com> References: <20260723001208.1469323-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit sata_dwc_remove() calls phy_exit() while phy_power_off() is still pending in sata_dwc_port_stop(), which runs later during device teardown. This violates the expected PHY sequencing of power_off before exit. Fixes: 0f48debdb906 ("ata: sata_dwc_460ex: add phy support") Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/ata/sata_dwc_460ex.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c index 8e3fc713891a..8a1d80ac906a 100644 --- a/drivers/ata/sata_dwc_460ex.c +++ b/drivers/ata/sata_dwc_460ex.c @@ -851,10 +851,14 @@ static int sata_dwc_port_start(struct ata_port *ap) if (err) goto CLEANUP_ALLOC; - err = phy_power_on(hsdev->phy); + err = phy_init(hsdev->phy); if (err) goto CLEANUP_ALLOC; + err = phy_power_on(hsdev->phy); + if (err) + goto CLEANUP_PHY; + for (i = 0; i < SATA_DWC_QCMD_MAX; i++) hsdevp->cmd_issued[i] = SATA_DWC_CMD_ISSUED_NOT; @@ -880,6 +884,8 @@ static int sata_dwc_port_start(struct ata_port *ap) dev_dbg(ap->dev, "%s: done\n", __func__); return 0; +CLEANUP_PHY: + phy_exit(hsdev->phy); CLEANUP_ALLOC: kfree(hsdevp); CLEANUP: @@ -897,6 +903,7 @@ static void sata_dwc_port_stop(struct ata_port *ap) dmaengine_terminate_sync(hsdevp->chan); dma_release_channel(hsdevp->chan); phy_power_off(hsdev->phy); + phy_exit(hsdev->phy); kfree(hsdevp); ap->private_data = NULL; @@ -1163,6 +1170,10 @@ static int sata_dwc_probe(struct platform_device *ofdev) if (irq < 0) return irq; + hsdev->phy = devm_phy_optional_get(dev, "sata-phy"); + if (IS_ERR(hsdev->phy)) + return PTR_ERR(hsdev->phy); + #ifdef CONFIG_SATA_DWC_OLD_DMA if (!of_property_present(dev->of_node, "dmas")) { err = sata_dwc_dma_init_old(ofdev, hsdev); @@ -1171,29 +1182,26 @@ static int sata_dwc_probe(struct platform_device *ofdev) } #endif - hsdev->phy = devm_phy_optional_get(dev, "sata-phy"); - if (IS_ERR(hsdev->phy)) - return PTR_ERR(hsdev->phy); - - err = phy_init(hsdev->phy); - if (err) - goto error_out; - /* * Now, register with libATA core, this will also initiate the * device discovery process, invoking our port_start() handler & * error_handler() to execute a dummy Softreset EH session */ err = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht); - if (err) + if (err) { dev_err(dev, "failed to activate host"); + goto error_out; + } /* Enable SATA Interrupts */ sata_dwc_enable_interrupts(hsdev); return 0; error_out: - phy_exit(hsdev->phy); +#ifdef CONFIG_SATA_DWC_OLD_DMA + if (!device_property_present(dev, "dmas")) + sata_dwc_dma_exit_old(hsdev); +#endif return err; } @@ -1205,8 +1213,6 @@ static void sata_dwc_remove(struct platform_device *ofdev) ata_host_detach(host); - phy_exit(hsdev->phy); - #ifdef CONFIG_SATA_DWC_OLD_DMA /* Free SATA DMA resources */ sata_dwc_dma_exit_old(hsdev); -- 2.55.0