mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
Merge patch series "scsi: ufs: Bug fixes for ufs core and platform drivers"
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> says: Hi, This series has several bug fixes that I encountered when the ufs-qcom driver was removed and inserted back. But the fixes are applicable to other platform glue drivers as well. This series is tested on Qcom RB5 development board based on SM8250 SoC. Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Link: https://lore.kernel.org/r/20241111-ufs_bug_fix-v1-0-45ad8b62f02e@linaro.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
commit
019880c08d
11 changed files with 29 additions and 26 deletions
|
|
@ -10231,6 +10231,7 @@ void ufshcd_remove(struct ufs_hba *hba)
|
|||
ufs_hwmon_remove(hba);
|
||||
ufs_bsg_remove(hba);
|
||||
ufs_sysfs_remove_nodes(hba->dev);
|
||||
cancel_delayed_work_sync(&hba->ufs_rtc_update_work);
|
||||
blk_mq_destroy_queue(hba->tmf_queue);
|
||||
blk_put_queue(hba->tmf_queue);
|
||||
blk_mq_free_tag_set(&hba->tmf_tag_set);
|
||||
|
|
|
|||
|
|
@ -307,9 +307,7 @@ static int cdns_ufs_pltfrm_probe(struct platform_device *pdev)
|
|||
*/
|
||||
static void cdns_ufs_pltfrm_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops cdns_ufs_dev_pm_ops = {
|
||||
|
|
|
|||
|
|
@ -76,10 +76,7 @@ static int tc_dwc_g210_pltfm_probe(struct platform_device *pdev)
|
|||
*/
|
||||
static void tc_dwc_g210_pltfm_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
pm_runtime_get_sync(&(pdev)->dev);
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops tc_dwc_g210_pltfm_pm_ops = {
|
||||
|
|
|
|||
|
|
@ -1992,8 +1992,7 @@ static void exynos_ufs_remove(struct platform_device *pdev)
|
|||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
struct exynos_ufs *ufs = ufshcd_get_variant(hba);
|
||||
|
||||
pm_runtime_get_sync(&(pdev)->dev);
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
|
||||
phy_power_off(ufs->phy);
|
||||
phy_exit(ufs->phy);
|
||||
|
|
|
|||
|
|
@ -576,9 +576,7 @@ static int ufs_hisi_probe(struct platform_device *pdev)
|
|||
|
||||
static void ufs_hisi_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops ufs_hisi_pm_ops = {
|
||||
|
|
|
|||
|
|
@ -1879,10 +1879,7 @@ out:
|
|||
*/
|
||||
static void ufs_mtk_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
pm_runtime_get_sync(&(pdev)->dev);
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
|
|
|||
|
|
@ -1861,10 +1861,11 @@ static int ufs_qcom_probe(struct platform_device *pdev)
|
|||
static void ufs_qcom_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
struct ufs_qcom_host *host = ufshcd_get_variant(hba);
|
||||
|
||||
pm_runtime_get_sync(&(pdev)->dev);
|
||||
ufshcd_remove(hba);
|
||||
platform_device_msi_free_irqs_all(hba->dev);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
if (host->esi_enabled)
|
||||
platform_device_msi_free_irqs_all(hba->dev);
|
||||
}
|
||||
|
||||
static const struct of_device_id ufs_qcom_of_match[] __maybe_unused = {
|
||||
|
|
|
|||
|
|
@ -397,9 +397,7 @@ static int ufs_renesas_probe(struct platform_device *pdev)
|
|||
|
||||
static void ufs_renesas_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
}
|
||||
|
||||
static struct platform_driver ufs_renesas_platform = {
|
||||
|
|
|
|||
|
|
@ -427,10 +427,7 @@ static int ufs_sprd_probe(struct platform_device *pdev)
|
|||
|
||||
static void ufs_sprd_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
pm_runtime_get_sync(&(pdev)->dev);
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_pltfrm_remove(pdev);
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops ufs_sprd_pm_ops = {
|
||||
|
|
|
|||
|
|
@ -524,6 +524,22 @@ out:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(ufshcd_pltfrm_init);
|
||||
|
||||
/**
|
||||
* ufshcd_pltfrm_remove - Remove ufshcd platform
|
||||
* @pdev: pointer to Platform device handle
|
||||
*/
|
||||
void ufshcd_pltfrm_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ufs_hba *hba = platform_get_drvdata(pdev);
|
||||
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
ufshcd_remove(hba);
|
||||
ufshcd_dealloc_host(hba);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ufshcd_pltfrm_remove);
|
||||
|
||||
MODULE_AUTHOR("Santosh Yaragnavi <santosh.sy@samsung.com>");
|
||||
MODULE_AUTHOR("Vinayak Holikatti <h.vinayak@samsung.com>");
|
||||
MODULE_DESCRIPTION("UFS host controller Platform bus based glue driver");
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ int ufshcd_negotiate_pwr_params(const struct ufs_host_params *host_params,
|
|||
void ufshcd_init_host_params(struct ufs_host_params *host_params);
|
||||
int ufshcd_pltfrm_init(struct platform_device *pdev,
|
||||
const struct ufs_hba_variant_ops *vops);
|
||||
void ufshcd_pltfrm_remove(struct platform_device *pdev);
|
||||
int ufshcd_populate_vreg(struct device *dev, const char *name,
|
||||
struct ufs_vreg **out_vreg, bool skip_current);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue