Commit 467e6cc7 authored by Martin K. Petersen's avatar Martin K. Petersen

Merge patch series "UFS host controller driver patches"

Bart Van Assche <bvanassche@acm.org> says:

Please consider these four UFS host controller driver patches for the next
merge window.

Link: https://lore.kernel.org/r/20230524203659.1394307-1-bvanassche@acm.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents f762326b 0818a690
...@@ -2899,7 +2899,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) ...@@ -2899,7 +2899,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
ufshcd_hold(hba); ufshcd_hold(hba);
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd);
lrbp->cmd = cmd; lrbp->cmd = cmd;
lrbp->task_tag = tag; lrbp->task_tag = tag;
lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
...@@ -2915,7 +2914,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) ...@@ -2915,7 +2914,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
err = ufshcd_map_sg(hba, lrbp); err = ufshcd_map_sg(hba, lrbp);
if (err) { if (err) {
lrbp->cmd = NULL;
ufshcd_release(hba); ufshcd_release(hba);
goto out; goto out;
} }
...@@ -3178,7 +3176,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, ...@@ -3178,7 +3176,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
down_read(&hba->clk_scaling_lock); down_read(&hba->clk_scaling_lock);
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd); lrbp->cmd = NULL;
err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag);
if (unlikely(err)) if (unlikely(err))
goto out; goto out;
...@@ -5418,7 +5416,6 @@ void ufshcd_release_scsi_cmd(struct ufs_hba *hba, ...@@ -5418,7 +5416,6 @@ void ufshcd_release_scsi_cmd(struct ufs_hba *hba,
struct scsi_cmnd *cmd = lrbp->cmd; struct scsi_cmnd *cmd = lrbp->cmd;
scsi_dma_unmap(cmd); scsi_dma_unmap(cmd);
lrbp->cmd = NULL; /* Mark the command as completed. */
ufshcd_release(hba); ufshcd_release(hba);
ufshcd_clk_scaling_update_busy(hba); ufshcd_clk_scaling_update_busy(hba);
} }
...@@ -7106,7 +7103,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba, ...@@ -7106,7 +7103,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
down_read(&hba->clk_scaling_lock); down_read(&hba->clk_scaling_lock);
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd);
lrbp->cmd = NULL; lrbp->cmd = NULL;
lrbp->task_tag = tag; lrbp->task_tag = tag;
lrbp->lun = 0; lrbp->lun = 0;
...@@ -7278,7 +7274,6 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r ...@@ -7278,7 +7274,6 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r
down_read(&hba->clk_scaling_lock); down_read(&hba->clk_scaling_lock);
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd);
lrbp->cmd = NULL; lrbp->cmd = NULL;
lrbp->task_tag = tag; lrbp->task_tag = tag;
lrbp->lun = UFS_UPIU_RPMB_WLUN; lrbp->lun = UFS_UPIU_RPMB_WLUN;
...@@ -9296,7 +9291,8 @@ static int ufshcd_execute_start_stop(struct scsi_device *sdev, ...@@ -9296,7 +9291,8 @@ static int ufshcd_execute_start_stop(struct scsi_device *sdev,
}; };
return scsi_execute_cmd(sdev, cdb, REQ_OP_DRV_IN, /*buffer=*/NULL, return scsi_execute_cmd(sdev, cdb, REQ_OP_DRV_IN, /*buffer=*/NULL,
/*bufflen=*/0, /*timeout=*/HZ, /*retries=*/0, &args); /*bufflen=*/0, /*timeout=*/10 * HZ, /*retries=*/0,
&args);
} }
/** /**
...@@ -9879,28 +9875,6 @@ static int ufshcd_wl_resume(struct device *dev) ...@@ -9879,28 +9875,6 @@ static int ufshcd_wl_resume(struct device *dev)
} }
#endif #endif
static void ufshcd_wl_shutdown(struct device *dev)
{
struct scsi_device *sdev = to_scsi_device(dev);
struct ufs_hba *hba;
hba = shost_priv(sdev->host);
down(&hba->host_sem);
hba->shutting_down = true;
up(&hba->host_sem);
/* Turn on everything while shutting down */
ufshcd_rpm_get_sync(hba);
scsi_device_quiesce(sdev);
shost_for_each_device(sdev, hba->host) {
if (sdev == hba->ufs_device_wlun)
continue;
scsi_device_quiesce(sdev);
}
__ufshcd_wl_suspend(hba, UFS_SHUTDOWN_PM);
}
/** /**
* ufshcd_suspend - helper function for suspend operations * ufshcd_suspend - helper function for suspend operations
* @hba: per adapter instance * @hba: per adapter instance
...@@ -10085,25 +10059,34 @@ int ufshcd_runtime_resume(struct device *dev) ...@@ -10085,25 +10059,34 @@ int ufshcd_runtime_resume(struct device *dev)
EXPORT_SYMBOL(ufshcd_runtime_resume); EXPORT_SYMBOL(ufshcd_runtime_resume);
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
/** static void ufshcd_wl_shutdown(struct device *dev)
* ufshcd_shutdown - shutdown routine
* @hba: per adapter instance
*
* This function would turn off both UFS device and UFS hba
* regulators. It would also disable clocks.
*
* Returns 0 always to allow force shutdown even in case of errors.
*/
int ufshcd_shutdown(struct ufs_hba *hba)
{ {
struct scsi_device *sdev = to_scsi_device(dev);
struct ufs_hba *hba = shost_priv(sdev->host);
down(&hba->host_sem);
hba->shutting_down = true;
up(&hba->host_sem);
/* Turn on everything while shutting down */
ufshcd_rpm_get_sync(hba);
scsi_device_quiesce(sdev);
shost_for_each_device(sdev, hba->host) {
if (sdev == hba->ufs_device_wlun)
continue;
scsi_device_quiesce(sdev);
}
__ufshcd_wl_suspend(hba, UFS_SHUTDOWN_PM);
/*
* Next, turn off the UFS controller and the UFS regulators. Disable
* clocks.
*/
if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba)) if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba))
ufshcd_suspend(hba); ufshcd_suspend(hba);
hba->is_powered = false; hba->is_powered = false;
/* allow force shutdown even in case of errors */
return 0;
} }
EXPORT_SYMBOL(ufshcd_shutdown);
/** /**
* ufshcd_remove - de-allocate SCSI host and host memory space * ufshcd_remove - de-allocate SCSI host and host memory space
......
...@@ -328,7 +328,6 @@ static const struct dev_pm_ops cdns_ufs_dev_pm_ops = { ...@@ -328,7 +328,6 @@ static const struct dev_pm_ops cdns_ufs_dev_pm_ops = {
static struct platform_driver cdns_ufs_pltfrm_driver = { static struct platform_driver cdns_ufs_pltfrm_driver = {
.probe = cdns_ufs_pltfrm_probe, .probe = cdns_ufs_pltfrm_probe,
.remove = cdns_ufs_pltfrm_remove, .remove = cdns_ufs_pltfrm_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "cdns-ufshcd", .name = "cdns-ufshcd",
.pm = &cdns_ufs_dev_pm_ops, .pm = &cdns_ufs_dev_pm_ops,
......
...@@ -32,15 +32,6 @@ static struct ufs_hba_variant_ops tc_dwc_g210_pci_hba_vops = { ...@@ -32,15 +32,6 @@ static struct ufs_hba_variant_ops tc_dwc_g210_pci_hba_vops = {
.link_startup_notify = ufshcd_dwc_link_startup_notify, .link_startup_notify = ufshcd_dwc_link_startup_notify,
}; };
/**
* tc_dwc_g210_pci_shutdown - main function to put the controller in reset state
* @pdev: pointer to PCI device handle
*/
static void tc_dwc_g210_pci_shutdown(struct pci_dev *pdev)
{
ufshcd_shutdown((struct ufs_hba *)pci_get_drvdata(pdev));
}
/** /**
* tc_dwc_g210_pci_remove - de-allocate PCI/SCSI host and host memory space * tc_dwc_g210_pci_remove - de-allocate PCI/SCSI host and host memory space
* data structure memory * data structure memory
...@@ -137,7 +128,6 @@ static struct pci_driver tc_dwc_g210_pci_driver = { ...@@ -137,7 +128,6 @@ static struct pci_driver tc_dwc_g210_pci_driver = {
.id_table = tc_dwc_g210_pci_tbl, .id_table = tc_dwc_g210_pci_tbl,
.probe = tc_dwc_g210_pci_probe, .probe = tc_dwc_g210_pci_probe,
.remove = tc_dwc_g210_pci_remove, .remove = tc_dwc_g210_pci_remove,
.shutdown = tc_dwc_g210_pci_shutdown,
.driver = { .driver = {
.pm = &tc_dwc_g210_pci_pm_ops .pm = &tc_dwc_g210_pci_pm_ops
}, },
......
...@@ -92,7 +92,6 @@ static const struct dev_pm_ops tc_dwc_g210_pltfm_pm_ops = { ...@@ -92,7 +92,6 @@ static const struct dev_pm_ops tc_dwc_g210_pltfm_pm_ops = {
static struct platform_driver tc_dwc_g210_pltfm_driver = { static struct platform_driver tc_dwc_g210_pltfm_driver = {
.probe = tc_dwc_g210_pltfm_probe, .probe = tc_dwc_g210_pltfm_probe,
.remove = tc_dwc_g210_pltfm_remove, .remove = tc_dwc_g210_pltfm_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "tc-dwc-g210-pltfm", .name = "tc-dwc-g210-pltfm",
.pm = &tc_dwc_g210_pltfm_pm_ops, .pm = &tc_dwc_g210_pltfm_pm_ops,
......
...@@ -1757,7 +1757,6 @@ static const struct dev_pm_ops exynos_ufs_pm_ops = { ...@@ -1757,7 +1757,6 @@ static const struct dev_pm_ops exynos_ufs_pm_ops = {
static struct platform_driver exynos_ufs_pltform = { static struct platform_driver exynos_ufs_pltform = {
.probe = exynos_ufs_probe, .probe = exynos_ufs_probe,
.remove = exynos_ufs_remove, .remove = exynos_ufs_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "exynos-ufshc", .name = "exynos-ufshc",
.pm = &exynos_ufs_pm_ops, .pm = &exynos_ufs_pm_ops,
......
...@@ -593,7 +593,6 @@ static const struct dev_pm_ops ufs_hisi_pm_ops = { ...@@ -593,7 +593,6 @@ static const struct dev_pm_ops ufs_hisi_pm_ops = {
static struct platform_driver ufs_hisi_pltform = { static struct platform_driver ufs_hisi_pltform = {
.probe = ufs_hisi_probe, .probe = ufs_hisi_probe,
.remove = ufs_hisi_remove, .remove = ufs_hisi_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "ufshcd-hisi", .name = "ufshcd-hisi",
.pm = &ufs_hisi_pm_ops, .pm = &ufs_hisi_pm_ops,
......
...@@ -1647,7 +1647,6 @@ static const struct dev_pm_ops ufs_mtk_pm_ops = { ...@@ -1647,7 +1647,6 @@ static const struct dev_pm_ops ufs_mtk_pm_ops = {
static struct platform_driver ufs_mtk_pltform = { static struct platform_driver ufs_mtk_pltform = {
.probe = ufs_mtk_probe, .probe = ufs_mtk_probe,
.remove = ufs_mtk_remove, .remove = ufs_mtk_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "ufshcd-mtk", .name = "ufshcd-mtk",
.pm = &ufs_mtk_pm_ops, .pm = &ufs_mtk_pm_ops,
......
...@@ -1723,7 +1723,6 @@ static const struct dev_pm_ops ufs_qcom_pm_ops = { ...@@ -1723,7 +1723,6 @@ static const struct dev_pm_ops ufs_qcom_pm_ops = {
static struct platform_driver ufs_qcom_pltform = { static struct platform_driver ufs_qcom_pltform = {
.probe = ufs_qcom_probe, .probe = ufs_qcom_probe,
.remove = ufs_qcom_remove, .remove = ufs_qcom_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "ufshcd-qcom", .name = "ufshcd-qcom",
.pm = &ufs_qcom_pm_ops, .pm = &ufs_qcom_pm_ops,
......
...@@ -444,7 +444,6 @@ static const struct dev_pm_ops ufs_sprd_pm_ops = { ...@@ -444,7 +444,6 @@ static const struct dev_pm_ops ufs_sprd_pm_ops = {
static struct platform_driver ufs_sprd_pltform = { static struct platform_driver ufs_sprd_pltform = {
.probe = ufs_sprd_probe, .probe = ufs_sprd_probe,
.remove = ufs_sprd_remove, .remove = ufs_sprd_remove,
.shutdown = ufshcd_pltfrm_shutdown,
.driver = { .driver = {
.name = "ufshcd-sprd", .name = "ufshcd-sprd",
.pm = &ufs_sprd_pm_ops, .pm = &ufs_sprd_pm_ops,
......
...@@ -504,15 +504,6 @@ static int ufshcd_pci_restore(struct device *dev) ...@@ -504,15 +504,6 @@ static int ufshcd_pci_restore(struct device *dev)
} }
#endif #endif
/**
* ufshcd_pci_shutdown - main function to put the controller in reset state
* @pdev: pointer to PCI device handle
*/
static void ufshcd_pci_shutdown(struct pci_dev *pdev)
{
ufshcd_shutdown((struct ufs_hba *)pci_get_drvdata(pdev));
}
/** /**
* ufshcd_pci_remove - de-allocate PCI/SCSI host and host memory space * ufshcd_pci_remove - de-allocate PCI/SCSI host and host memory space
* data structure memory * data structure memory
...@@ -618,7 +609,6 @@ static struct pci_driver ufshcd_pci_driver = { ...@@ -618,7 +609,6 @@ static struct pci_driver ufshcd_pci_driver = {
.id_table = ufshcd_pci_tbl, .id_table = ufshcd_pci_tbl,
.probe = ufshcd_pci_probe, .probe = ufshcd_pci_probe,
.remove = ufshcd_pci_remove, .remove = ufshcd_pci_remove,
.shutdown = ufshcd_pci_shutdown,
.driver = { .driver = {
.pm = &ufshcd_pci_pm_ops .pm = &ufshcd_pci_pm_ops
}, },
......
...@@ -190,12 +190,6 @@ static int ufshcd_parse_regulator_info(struct ufs_hba *hba) ...@@ -190,12 +190,6 @@ static int ufshcd_parse_regulator_info(struct ufs_hba *hba)
return err; return err;
} }
void ufshcd_pltfrm_shutdown(struct platform_device *pdev)
{
ufshcd_shutdown((struct ufs_hba *)platform_get_drvdata(pdev));
}
EXPORT_SYMBOL_GPL(ufshcd_pltfrm_shutdown);
static void ufshcd_init_lanes_per_dir(struct ufs_hba *hba) static void ufshcd_init_lanes_per_dir(struct ufs_hba *hba)
{ {
struct device *dev = hba->dev; struct device *dev = hba->dev;
......
...@@ -31,7 +31,6 @@ int ufshcd_get_pwr_dev_param(const struct ufs_dev_params *dev_param, ...@@ -31,7 +31,6 @@ int ufshcd_get_pwr_dev_param(const struct ufs_dev_params *dev_param,
void ufshcd_init_pwr_dev_param(struct ufs_dev_params *dev_param); void ufshcd_init_pwr_dev_param(struct ufs_dev_params *dev_param);
int ufshcd_pltfrm_init(struct platform_device *pdev, int ufshcd_pltfrm_init(struct platform_device *pdev,
const struct ufs_hba_variant_ops *vops); const struct ufs_hba_variant_ops *vops);
void ufshcd_pltfrm_shutdown(struct platform_device *pdev);
int ufshcd_populate_vreg(struct device *dev, const char *name, int ufshcd_populate_vreg(struct device *dev, const char *name,
struct ufs_vreg **out_vreg); struct ufs_vreg **out_vreg);
......
...@@ -1280,7 +1280,6 @@ extern int ufshcd_system_freeze(struct device *dev); ...@@ -1280,7 +1280,6 @@ extern int ufshcd_system_freeze(struct device *dev);
extern int ufshcd_system_thaw(struct device *dev); extern int ufshcd_system_thaw(struct device *dev);
extern int ufshcd_system_restore(struct device *dev); extern int ufshcd_system_restore(struct device *dev);
#endif #endif
extern int ufshcd_shutdown(struct ufs_hba *hba);
extern int ufshcd_dme_configure_adapt(struct ufs_hba *hba, extern int ufshcd_dme_configure_adapt(struct ufs_hba *hba,
int agreed_gear, int agreed_gear,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment