All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] permit to set block parameters per vendor
       [not found] <CGME20201223021559epcas2p1c44e4b9764f946c608d810c40c08e53e@epcas2p1.samsung.com>
@ 2020-12-23  2:05 ` Kiwoong Kim
       [not found]   ` <CGME20201223021601epcas2p1311bd2ee57014e3b536de5a5ca286f85@epcas2p1.samsung.com>
       [not found]   ` <CGME20201223021602epcas2p343141ccef708e29f424d390da5324177@epcas2p3.samsung.com>
  0 siblings, 2 replies; 5+ messages in thread
From: Kiwoong Kim @ 2020-12-23  2:05 UTC (permalink / raw)
  To: linux-scsi, alim.akhtar, avri.altman, jejb, martin.petersen,
	beanhuo, asutoshd, cang, bvanassche, grant.jung, sc.suh,
	hy50.seo, sh425.lee, bhoon95.kim
  Cc: Kiwoong Kim

v4 -> v3: fix some typos
v3 -> v2: rename exynos functions
v1 -> v2: rename the vops and fix some typos

There are some cases of dispatching a command with more than
one scatterlist entry and under 4KB size. Device sends just one DATA IN
but some SoCs transfer could tranfer data to a physically continuous
area, which should have done per each scatterlist entry.

Kiwoong Kim (2):
  ufs: add a vops to configure block parameter
  ufs: ufs-exynos: set dma_alignment to 4095

 drivers/scsi/ufs/ufs-exynos.c | 9 +++++++++
 drivers/scsi/ufs/ufshcd.c     | 2 ++
 drivers/scsi/ufs/ufshcd.h     | 8 ++++++++
 3 files changed, 19 insertions(+)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v4 1/2] ufs: add a vops to configure block parameter
       [not found]   ` <CGME20201223021601epcas2p1311bd2ee57014e3b536de5a5ca286f85@epcas2p1.samsung.com>
@ 2020-12-23  2:05     ` Kiwoong Kim
  2020-12-23  2:21       ` Can Guo
  2020-12-23  9:31       ` Stanley Chu
  0 siblings, 2 replies; 5+ messages in thread
From: Kiwoong Kim @ 2020-12-23  2:05 UTC (permalink / raw)
  To: linux-scsi, alim.akhtar, avri.altman, jejb, martin.petersen,
	beanhuo, asutoshd, cang, bvanassche, grant.jung, sc.suh,
	hy50.seo, sh425.lee, bhoon95.kim
  Cc: Kiwoong Kim

There could be some cases to set block parameters
per host, because of its own dma structure or whatever.

Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
---
 drivers/scsi/ufs/ufshcd.c | 2 ++
 drivers/scsi/ufs/ufshcd.h | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 92d433d..5f89b0e 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -4758,6 +4758,8 @@ static int ufshcd_slave_configure(struct scsi_device *sdev)
 
 	ufshcd_crypto_setup_rq_keyslot_manager(hba, q);
 
+	ufshcd_vops_slave_configure(hba, sdev);
+
 	return 0;
 }
 
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 61344c4..4bf4fed 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -329,6 +329,7 @@ struct ufs_hba_variant_ops {
 					void *data);
 	int	(*program_key)(struct ufs_hba *hba,
 			       const union ufs_crypto_cfg_entry *cfg, int slot);
+	void	(*slave_configure)(struct scsi_device *sdev);
 };
 
 /* clock gating state  */
@@ -1228,6 +1229,13 @@ static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba,
 		hba->vops->config_scaling_param(hba, profile, data);
 }
 
+static inline void ufshcd_vops_slave_configure(struct ufs_hba *hba,
+						    struct scsi_device *sdev)
+{
+	if (hba->vops && hba->vops->slave_configure)
+		hba->vops->slave_configure(sdev);
+}
+
 extern struct ufs_pm_lvl_states ufs_pm_lvl_states[];
 
 /*
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v4 2/2] ufs: ufs-exynos: set dma_alignment to 4095
       [not found]   ` <CGME20201223021602epcas2p343141ccef708e29f424d390da5324177@epcas2p3.samsung.com>
@ 2020-12-23  2:05     ` Kiwoong Kim
  0 siblings, 0 replies; 5+ messages in thread
From: Kiwoong Kim @ 2020-12-23  2:05 UTC (permalink / raw)
  To: linux-scsi, alim.akhtar, avri.altman, jejb, martin.petersen,
	beanhuo, asutoshd, cang, bvanassche, grant.jung, sc.suh,
	hy50.seo, sh425.lee, bhoon95.kim
  Cc: Kiwoong Kim

Exynos requires one scatterlist entry for smaller than
page size, i.e. 4KB. For the cases of dispatching commands
with more than one scatterlist entry and under 4KB size,
Exynos behaves as follows:

Given that a command to read something
from device is dispatched with two scatterlist entries that
are named AAA and BBB. After dispatching, host builds two PRDT
entries and during transmission, device sends just one DATA IN
because device doesn't care on host dma. The host then tranfers
the whole data from start address of the area named AAA.
In consequence, the area that follows AAA would be corrupted.

    |<------------->|
    +-------+------------         +-------+
    +  AAA  + (corrupted)   ...   +  BBB  +
    +-------+------------         +-------+

Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
---
 drivers/scsi/ufs/ufs-exynos.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/scsi/ufs/ufs-exynos.c b/drivers/scsi/ufs/ufs-exynos.c
index a8770ff..8635d9d 100644
--- a/drivers/scsi/ufs/ufs-exynos.c
+++ b/drivers/scsi/ufs/ufs-exynos.c
@@ -14,6 +14,7 @@
 #include <linux/of_address.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
+#include <linux/blkdev.h>
 
 #include "ufshcd.h"
 #include "ufshcd-pltfrm.h"
@@ -1193,6 +1194,13 @@ static int exynos_ufs_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	return 0;
 }
 
+static void exynos_ufs_slave_configure(struct scsi_device *sdev)
+{
+	struct request_queue *q = sdev->request_queue;
+
+	blk_queue_update_dma_alignment(q, PAGE_SIZE - 1);
+}
+
 static struct ufs_hba_variant_ops ufs_hba_exynos_ops = {
 	.name				= "exynos_ufs",
 	.init				= exynos_ufs_init,
@@ -1204,6 +1212,7 @@ static struct ufs_hba_variant_ops ufs_hba_exynos_ops = {
 	.hibern8_notify			= exynos_ufs_hibern8_notify,
 	.suspend			= exynos_ufs_suspend,
 	.resume				= exynos_ufs_resume,
+	.slave_configure		= exynos_ufs_slave_configure,
 };
 
 static int exynos_ufs_probe(struct platform_device *pdev)
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/2] ufs: add a vops to configure block parameter
  2020-12-23  2:05     ` [PATCH v4 1/2] ufs: add a vops to configure block parameter Kiwoong Kim
@ 2020-12-23  2:21       ` Can Guo
  2020-12-23  9:31       ` Stanley Chu
  1 sibling, 0 replies; 5+ messages in thread
From: Can Guo @ 2020-12-23  2:21 UTC (permalink / raw)
  To: Kiwoong Kim
  Cc: linux-scsi, alim.akhtar, avri.altman, jejb, martin.petersen,
	beanhuo, asutoshd, bvanassche, grant.jung, sc.suh, hy50.seo,
	sh425.lee, bhoon95.kim

On 2020-12-23 10:05, Kiwoong Kim wrote:
> There could be some cases to set block parameters
> per host, because of its own dma structure or whatever.
> 
> Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>

You missed my reviewed-by tag... Again, here it is

Reviewed-by: Can Guo <cang@codeaurora.org>

> ---
>  drivers/scsi/ufs/ufshcd.c | 2 ++
>  drivers/scsi/ufs/ufshcd.h | 8 ++++++++
>  2 files changed, 10 insertions(+)
> 
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index 92d433d..5f89b0e 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -4758,6 +4758,8 @@ static int ufshcd_slave_configure(struct
> scsi_device *sdev)
> 
>  	ufshcd_crypto_setup_rq_keyslot_manager(hba, q);
> 
> +	ufshcd_vops_slave_configure(hba, sdev);
> +
>  	return 0;
>  }
> 
> diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
> index 61344c4..4bf4fed 100644
> --- a/drivers/scsi/ufs/ufshcd.h
> +++ b/drivers/scsi/ufs/ufshcd.h
> @@ -329,6 +329,7 @@ struct ufs_hba_variant_ops {
>  					void *data);
>  	int	(*program_key)(struct ufs_hba *hba,
>  			       const union ufs_crypto_cfg_entry *cfg, int slot);
> +	void	(*slave_configure)(struct scsi_device *sdev);
>  };
> 
>  /* clock gating state  */
> @@ -1228,6 +1229,13 @@ static inline void
> ufshcd_vops_config_scaling_param(struct ufs_hba *hba,
>  		hba->vops->config_scaling_param(hba, profile, data);
>  }
> 
> +static inline void ufshcd_vops_slave_configure(struct ufs_hba *hba,
> +						    struct scsi_device *sdev)
> +{
> +	if (hba->vops && hba->vops->slave_configure)
> +		hba->vops->slave_configure(sdev);
> +}
> +
>  extern struct ufs_pm_lvl_states ufs_pm_lvl_states[];
> 
>  /*

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/2] ufs: add a vops to configure block parameter
  2020-12-23  2:05     ` [PATCH v4 1/2] ufs: add a vops to configure block parameter Kiwoong Kim
  2020-12-23  2:21       ` Can Guo
@ 2020-12-23  9:31       ` Stanley Chu
  1 sibling, 0 replies; 5+ messages in thread
From: Stanley Chu @ 2020-12-23  9:31 UTC (permalink / raw)
  To: Kiwoong Kim
  Cc: linux-scsi, alim.akhtar, avri.altman, jejb, martin.petersen,
	beanhuo, asutoshd, cang, bvanassche, grant.jung, sc.suh,
	hy50.seo, sh425.lee, bhoon95.kim

On Wed, 2020-12-23 at 11:05 +0900, Kiwoong Kim wrote:
> There could be some cases to set block parameters
> per host, because of its own dma structure or whatever.
> 
> Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-12-23  9:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20201223021559epcas2p1c44e4b9764f946c608d810c40c08e53e@epcas2p1.samsung.com>
2020-12-23  2:05 ` [PATCH v4 0/2] permit to set block parameters per vendor Kiwoong Kim
     [not found]   ` <CGME20201223021601epcas2p1311bd2ee57014e3b536de5a5ca286f85@epcas2p1.samsung.com>
2020-12-23  2:05     ` [PATCH v4 1/2] ufs: add a vops to configure block parameter Kiwoong Kim
2020-12-23  2:21       ` Can Guo
2020-12-23  9:31       ` Stanley Chu
     [not found]   ` <CGME20201223021602epcas2p343141ccef708e29f424d390da5324177@epcas2p3.samsung.com>
2020-12-23  2:05     ` [PATCH v4 2/2] ufs: ufs-exynos: set dma_alignment to 4095 Kiwoong Kim

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.