Skip to content

Commit 6f9f0d5

Browse files
petegriffinmartinkpetersen
authored andcommitted
scsi: ufs: exynos: Add some pa_dbg_ register offsets into drvdata
This allows these registers to be at different offsets or not exist at all on some SoCs variants. Signed-off-by: Peter Griffin <[email protected]> Link: https://lore.kernel.org/r/[email protected] Acked-by: Krzysztof Kozlowski <[email protected]> Tested-by: Will McVicker <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent c9deb9a commit 6f9f0d5

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

drivers/ufs/host/ufs-exynos.c

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,9 @@ static int exynosauto_ufs_post_pwr_change(struct exynos_ufs *ufs,
308308

309309
static int exynos7_ufs_pre_link(struct exynos_ufs *ufs)
310310
{
311+
struct exynos_ufs_uic_attr *attr = ufs->drv_data->uic_attr;
312+
u32 val = attr->pa_dbg_opt_suite1_val;
311313
struct ufs_hba *hba = ufs->hba;
312-
u32 val = ufs->drv_data->uic_attr->pa_dbg_option_suite;
313314
int i;
314315

315316
exynos_ufs_enable_ov_tm(hba);
@@ -326,12 +327,13 @@ static int exynos7_ufs_pre_link(struct exynos_ufs *ufs)
326327
UIC_ARG_MIB_SEL(TX_HIBERN8_CONTROL, i), 0x0);
327328
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_TXPHY_CFGUPDT), 0x1);
328329
udelay(1);
329-
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_OPTION_SUITE), val | (1 << 12));
330+
ufshcd_dme_set(hba, UIC_ARG_MIB(attr->pa_dbg_opt_suite1_off),
331+
val | (1 << 12));
330332
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_SKIP_RESET_PHY), 0x1);
331333
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_SKIP_LINE_RESET), 0x1);
332334
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_LINE_RESET_REQ), 0x1);
333335
udelay(1600);
334-
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_OPTION_SUITE), val);
336+
ufshcd_dme_set(hba, UIC_ARG_MIB(attr->pa_dbg_opt_suite1_off), val);
335337

336338
return 0;
337339
}
@@ -923,14 +925,19 @@ static int exynos_ufs_phy_init(struct exynos_ufs *ufs)
923925

924926
static void exynos_ufs_config_unipro(struct exynos_ufs *ufs)
925927
{
928+
struct exynos_ufs_uic_attr *attr = ufs->drv_data->uic_attr;
926929
struct ufs_hba *hba = ufs->hba;
927930

928-
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_CLK_PERIOD),
929-
DIV_ROUND_UP(NSEC_PER_SEC, ufs->mclk_rate));
931+
if (attr->pa_dbg_clk_period_off)
932+
ufshcd_dme_set(hba, UIC_ARG_MIB(attr->pa_dbg_clk_period_off),
933+
DIV_ROUND_UP(NSEC_PER_SEC, ufs->mclk_rate));
934+
930935
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TXTRAILINGCLOCKS),
931936
ufs->drv_data->uic_attr->tx_trailingclks);
932-
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_OPTION_SUITE),
933-
ufs->drv_data->uic_attr->pa_dbg_option_suite);
937+
938+
if (attr->pa_dbg_opt_suite1_off)
939+
ufshcd_dme_set(hba, UIC_ARG_MIB(attr->pa_dbg_opt_suite1_off),
940+
attr->pa_dbg_opt_suite1_val);
934941
}
935942

936943
static void exynos_ufs_config_intr(struct exynos_ufs *ufs, u32 errs, u8 index)
@@ -1487,10 +1494,11 @@ static int exynosauto_ufs_vh_init(struct ufs_hba *hba)
14871494

14881495
static int fsd_ufs_pre_link(struct exynos_ufs *ufs)
14891496
{
1490-
int i;
1497+
struct exynos_ufs_uic_attr *attr = ufs->drv_data->uic_attr;
14911498
struct ufs_hba *hba = ufs->hba;
1499+
int i;
14921500

1493-
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_CLK_PERIOD),
1501+
ufshcd_dme_set(hba, UIC_ARG_MIB(attr->pa_dbg_clk_period_off),
14941502
DIV_ROUND_UP(NSEC_PER_SEC, ufs->mclk_rate));
14951503
ufshcd_dme_set(hba, UIC_ARG_MIB(0x201), 0x12);
14961504
ufshcd_dme_set(hba, UIC_ARG_MIB(0x200), 0x40);
@@ -1514,7 +1522,9 @@ static int fsd_ufs_pre_link(struct exynos_ufs *ufs)
15141522

15151523
ufshcd_dme_set(hba, UIC_ARG_MIB(0x200), 0x0);
15161524
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_AUTOMODE_THLD), 0x4E20);
1517-
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_OPTION_SUITE), 0x2e820183);
1525+
1526+
ufshcd_dme_set(hba, UIC_ARG_MIB(attr->pa_dbg_opt_suite1_off),
1527+
0x2e820183);
15181528
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0x0);
15191529

15201530
exynos_ufs_establish_connt(ufs);
@@ -1656,7 +1666,9 @@ static struct exynos_ufs_uic_attr exynos7_uic_attr = {
16561666
.rx_hs_g1_prep_sync_len_cap = PREP_LEN(0xf),
16571667
.rx_hs_g2_prep_sync_len_cap = PREP_LEN(0xf),
16581668
.rx_hs_g3_prep_sync_len_cap = PREP_LEN(0xf),
1659-
.pa_dbg_option_suite = 0x30103,
1669+
.pa_dbg_clk_period_off = PA_DBG_CLK_PERIOD,
1670+
.pa_dbg_opt_suite1_val = 0x30103,
1671+
.pa_dbg_opt_suite1_off = PA_DBG_OPTION_SUITE,
16601672
};
16611673

16621674
static const struct exynos_ufs_drv_data exynosauto_ufs_drvs = {
@@ -1730,7 +1742,9 @@ static struct exynos_ufs_uic_attr fsd_uic_attr = {
17301742
.rx_hs_g1_prep_sync_len_cap = PREP_LEN(0xf),
17311743
.rx_hs_g2_prep_sync_len_cap = PREP_LEN(0xf),
17321744
.rx_hs_g3_prep_sync_len_cap = PREP_LEN(0xf),
1733-
.pa_dbg_option_suite = 0x2E820183,
1745+
.pa_dbg_clk_period_off = PA_DBG_CLK_PERIOD,
1746+
.pa_dbg_opt_suite1_val = 0x2E820183,
1747+
.pa_dbg_opt_suite1_off = PA_DBG_OPTION_SUITE,
17341748
};
17351749

17361750
static const struct exynos_ufs_drv_data fsd_ufs_drvs = {

drivers/ufs/host/ufs-exynos.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,11 @@ struct exynos_ufs_uic_attr {
145145
/* Common Attributes */
146146
unsigned int cmn_pwm_clk_ctrl;
147147
/* Internal Attributes */
148-
unsigned int pa_dbg_option_suite;
148+
unsigned int pa_dbg_clk_period_off;
149+
unsigned int pa_dbg_opt_suite1_val;
150+
unsigned int pa_dbg_opt_suite1_off;
151+
unsigned int pa_dbg_opt_suite2_val;
152+
unsigned int pa_dbg_opt_suite2_off;
149153
/* Changeable Attributes */
150154
unsigned int rx_adv_fine_gran_sup_en;
151155
unsigned int rx_adv_fine_gran_step;

0 commit comments

Comments
 (0)