Skip to content

Commit 56f3327

Browse files
petegriffingregkh
authored andcommitted
scsi: ufs: exynos: Move UFS shareability value to drvdata
[ Upstream commit 68f5ef7 ] gs101 I/O coherency shareability bits differ from exynosauto SoC. To support both SoCs move this info the SoC drvdata. Currently both the value and mask are the same for both gs101 and exynosauto, thus we use the same value. Signed-off-by: Peter Griffin <peter.griffin@linaro.org> Link: https://lore.kernel.org/r/20250319-exynos-ufs-stability-fixes-v2-2-96722cc2ba1b@linaro.org Fixes: d11e0a3 ("scsi: ufs: exynos: Add support for Tensor gs101 SoC") Cc: stable@vger.kernel.org Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 661380d commit 56f3327

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

drivers/ufs/host/ufs-exynos.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,16 @@
8686
UIC_TRANSPORT_NO_CONNECTION_RX |\
8787
UIC_TRANSPORT_BAD_TC)
8888

89-
/* FSYS UFS Shareability */
90-
#define UFS_WR_SHARABLE BIT(2)
91-
#define UFS_RD_SHARABLE BIT(1)
92-
#define UFS_SHARABLE (UFS_WR_SHARABLE | UFS_RD_SHARABLE)
93-
#define UFS_SHAREABILITY_OFFSET 0x710
89+
/* UFS Shareability */
90+
#define UFS_EXYNOSAUTO_WR_SHARABLE BIT(2)
91+
#define UFS_EXYNOSAUTO_RD_SHARABLE BIT(1)
92+
#define UFS_EXYNOSAUTO_SHARABLE (UFS_EXYNOSAUTO_WR_SHARABLE | \
93+
UFS_EXYNOSAUTO_RD_SHARABLE)
94+
#define UFS_GS101_WR_SHARABLE BIT(1)
95+
#define UFS_GS101_RD_SHARABLE BIT(0)
96+
#define UFS_GS101_SHARABLE (UFS_GS101_WR_SHARABLE | \
97+
UFS_GS101_RD_SHARABLE)
98+
#define UFS_SHAREABILITY_OFFSET 0x710
9499

95100
/* Multi-host registers */
96101
#define MHCTRL 0xC4
@@ -206,7 +211,7 @@ static int exynos_ufs_shareability(struct exynos_ufs *ufs)
206211
if (ufs->sysreg) {
207212
return regmap_update_bits(ufs->sysreg,
208213
ufs->shareability_reg_offset,
209-
UFS_SHARABLE, UFS_SHARABLE);
214+
ufs->iocc_mask, ufs->iocc_mask);
210215
}
211216

212217
attr->tx_dif_p_nsec = 3200000;
@@ -1148,6 +1153,7 @@ static int exynos_ufs_parse_dt(struct device *dev, struct exynos_ufs *ufs)
11481153
}
11491154
}
11501155

1156+
ufs->iocc_mask = ufs->drv_data->iocc_mask;
11511157
ufs->pclk_avail_min = PCLK_AVAIL_MIN;
11521158
ufs->pclk_avail_max = PCLK_AVAIL_MAX;
11531159

@@ -2021,6 +2027,7 @@ static const struct exynos_ufs_drv_data exynosauto_ufs_drvs = {
20212027
.opts = EXYNOS_UFS_OPT_BROKEN_AUTO_CLK_CTRL |
20222028
EXYNOS_UFS_OPT_SKIP_CONFIG_PHY_ATTR |
20232029
EXYNOS_UFS_OPT_BROKEN_RX_SEL_IDX,
2030+
.iocc_mask = UFS_EXYNOSAUTO_SHARABLE,
20242031
.drv_init = exynosauto_ufs_drv_init,
20252032
.post_hce_enable = exynosauto_ufs_post_hce_enable,
20262033
.pre_link = exynosauto_ufs_pre_link,
@@ -2143,6 +2150,7 @@ static const struct exynos_ufs_drv_data gs101_ufs_drvs = {
21432150
EXYNOS_UFS_OPT_SKIP_CONFIG_PHY_ATTR |
21442151
EXYNOS_UFS_OPT_UFSPR_SECURE |
21452152
EXYNOS_UFS_OPT_TIMER_TICK_SELECT,
2153+
.iocc_mask = UFS_GS101_SHARABLE,
21462154
.drv_init = gs101_ufs_drv_init,
21472155
.pre_link = gs101_ufs_pre_link,
21482156
.post_link = gs101_ufs_post_link,

drivers/ufs/host/ufs-exynos.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ struct exynos_ufs_drv_data {
181181
struct exynos_ufs_uic_attr *uic_attr;
182182
unsigned int quirks;
183183
unsigned int opts;
184+
u32 iocc_mask;
184185
/* SoC's specific operations */
185186
int (*drv_init)(struct exynos_ufs *ufs);
186187
int (*pre_link)(struct exynos_ufs *ufs);
@@ -231,6 +232,7 @@ struct exynos_ufs {
231232
const struct exynos_ufs_drv_data *drv_data;
232233
struct regmap *sysreg;
233234
u32 shareability_reg_offset;
235+
u32 iocc_mask;
234236

235237
u32 opts;
236238
#define EXYNOS_UFS_OPT_HAS_APB_CLK_CTRL BIT(0)

0 commit comments

Comments
 (0)