* [PATCH v2 0/2] Support exynosautov9 ufs phy driver [not found] <CGME20210706020608epcas2p1ff6e0073edfa43de92ebd6c754df18cf@epcas2p1.samsung.com> @ 2021-07-06 2:06 ` Chanho Park [not found] ` <CGME20210706020609epcas2p3af9ad22d849366dd850214b5c2e9f9dd@epcas2p3.samsung.com> [not found] ` <CGME20210706020611epcas2p47fd1367425d1bac79c7ec983c21086b8@epcas2p4.samsung.com> 0 siblings, 2 replies; 6+ messages in thread From: Chanho Park @ 2021-07-06 2:06 UTC (permalink / raw) To: Kishon Vijay Abraham I, Vinod Koul, Krzysztof Kozlowski Cc: Marek Szyprowski, Jaehoon Chung, Alim Akhtar, linux-phy, Chanho Park This patchset introduces ExynosAuto v9 SoC ufs phy driver as Generic PHY driver framework. According to Krzysztof's suggestion, this patchset moves phy-exynos7-ufs header to c source file. Changes from v1: - squashed "custom PHY_TRSV_CH_OFFSET support" patch - use "exynosautov9" instead of "exynosauto" to avoid confusion with exynosauto 8890 - move phy-exynos7-ufs.h to phy-exynos7-ufs.c - s/exynosauto/exynosautov9/g Chanho Park (2): phy: samsung-ufs: move phy-exynos7-ufs header phy: samsung-ufs: support exynosauto ufs phy driver .../bindings/phy/samsung,ufs-phy.yaml | 1 + drivers/phy/samsung/Makefile | 4 +- .../{phy-exynos7-ufs.h => phy-exynos7-ufs.c} | 11 ++- drivers/phy/samsung/phy-exynosautov9-ufs.c | 70 +++++++++++++++++++ drivers/phy/samsung/phy-samsung-ufs.c | 3 + drivers/phy/samsung/phy-samsung-ufs.h | 12 +++- 6 files changed, 91 insertions(+), 10 deletions(-) rename drivers/phy/samsung/{phy-exynos7-ufs.h => phy-exynos7-ufs.c} (93%) create mode 100644 drivers/phy/samsung/phy-exynosautov9-ufs.c -- 2.32.0 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <CGME20210706020609epcas2p3af9ad22d849366dd850214b5c2e9f9dd@epcas2p3.samsung.com>]
* [PATCH v2 1/2] phy: samsung-ufs: move phy-exynos7-ufs header [not found] ` <CGME20210706020609epcas2p3af9ad22d849366dd850214b5c2e9f9dd@epcas2p3.samsung.com> @ 2021-07-06 2:06 ` Chanho Park 2021-07-06 2:10 ` Jaehoon Chung 0 siblings, 1 reply; 6+ messages in thread From: Chanho Park @ 2021-07-06 2:06 UTC (permalink / raw) To: Kishon Vijay Abraham I, Vinod Koul, Krzysztof Kozlowski Cc: Marek Szyprowski, Jaehoon Chung, Alim Akhtar, linux-phy, Chanho Park, Krzysztof Kozlowski Instead of using exynos7 ufs definition in phy-exynos7-ufs.h, we should put it into phy-exynos7-ufs.c to be included different objects or units. Change-Id: Iddd3662445fe5373c254f994045b451b443fb91c Suggested-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> Signed-off-by: Chanho Park <chanho61.park@samsung.com> --- drivers/phy/samsung/Makefile | 3 ++- .../samsung/{phy-exynos7-ufs.h => phy-exynos7-ufs.c} | 11 +++++------ drivers/phy/samsung/phy-samsung-ufs.h | 4 +++- 3 files changed, 10 insertions(+), 8 deletions(-) rename drivers/phy/samsung/{phy-exynos7-ufs.h => phy-exynos7-ufs.c} (93%) diff --git a/drivers/phy/samsung/Makefile b/drivers/phy/samsung/Makefile index 3959100fe8a2..d55d9aa5b932 100644 --- a/drivers/phy/samsung/Makefile +++ b/drivers/phy/samsung/Makefile @@ -2,7 +2,8 @@ obj-$(CONFIG_PHY_EXYNOS_DP_VIDEO) += phy-exynos-dp-video.o obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO) += phy-exynos-mipi-video.o obj-$(CONFIG_PHY_EXYNOS_PCIE) += phy-exynos-pcie.o -obj-$(CONFIG_PHY_SAMSUNG_UFS) += phy-samsung-ufs.o +obj-$(CONFIG_PHY_SAMSUNG_UFS) += phy-samsung-ufs.o \ + phy-exynos7-ufs.o obj-$(CONFIG_PHY_SAMSUNG_USB2) += phy-exynos-usb2.o phy-exynos-usb2-y += phy-samsung-usb2.o phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o diff --git a/drivers/phy/samsung/phy-exynos7-ufs.h b/drivers/phy/samsung/phy-exynos7-ufs.c similarity index 93% rename from drivers/phy/samsung/phy-exynos7-ufs.h rename to drivers/phy/samsung/phy-exynos7-ufs.c index 518923141958..657b58319c14 100644 --- a/drivers/phy/samsung/phy-exynos7-ufs.h +++ b/drivers/phy/samsung/phy-exynos7-ufs.c @@ -1,11 +1,12 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ +// SPDX-License-Identifier: GPL-2.0-only /* * UFS PHY driver data for Samsung EXYNOS7 SoC * * Copyright (C) 2020 Samsung Electronics Co., Ltd. */ -#ifndef _PHY_EXYNOS7_UFS_H_ -#define _PHY_EXYNOS7_UFS_H_ + +#include <linux/io.h> +#include <linux/phy/phy.h> #include "phy-samsung-ufs.h" @@ -68,7 +69,7 @@ static const struct samsung_ufs_phy_cfg *exynos7_ufs_phy_cfgs[CFG_TAG_MAX] = { [CFG_POST_PWR_HS] = exynos7_post_pwr_hs_cfg, }; -static struct samsung_ufs_phy_drvdata exynos7_ufs_phy = { +const struct samsung_ufs_phy_drvdata exynos7_ufs_phy = { .cfg = exynos7_ufs_phy_cfgs, .isol = { .offset = EXYNOS7_EMBEDDED_COMBO_PHY_CTRL, @@ -77,5 +78,3 @@ static struct samsung_ufs_phy_drvdata exynos7_ufs_phy = { }, .has_symbol_clk = 1, }; - -#endif /* _PHY_EXYNOS7_UFS_H_ */ diff --git a/drivers/phy/samsung/phy-samsung-ufs.h b/drivers/phy/samsung/phy-samsung-ufs.h index 5de78710524c..1532d239ff0e 100644 --- a/drivers/phy/samsung/phy-samsung-ufs.h +++ b/drivers/phy/samsung/phy-samsung-ufs.h @@ -10,6 +10,8 @@ #ifndef _PHY_SAMSUNG_UFS_ #define _PHY_SAMSUNG_UFS_ +#include <linux/regmap.h> + #define PHY_COMN_BLK 1 #define PHY_TRSV_BLK 2 #define END_UFS_PHY_CFG { 0 } @@ -134,6 +136,6 @@ static inline void samsung_ufs_phy_ctrl_isol( phy->isol->mask, isol ? 0 : phy->isol->en); } -#include "phy-exynos7-ufs.h" +extern const struct samsung_ufs_phy_drvdata exynos7_ufs_phy; #endif /* _PHY_SAMSUNG_UFS_ */ -- 2.32.0 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] phy: samsung-ufs: move phy-exynos7-ufs header 2021-07-06 2:06 ` [PATCH v2 1/2] phy: samsung-ufs: move phy-exynos7-ufs header Chanho Park @ 2021-07-06 2:10 ` Jaehoon Chung 2021-07-06 2:14 ` Chanho Park 0 siblings, 1 reply; 6+ messages in thread From: Jaehoon Chung @ 2021-07-06 2:10 UTC (permalink / raw) To: Chanho Park, Kishon Vijay Abraham I, Vinod Koul, Krzysztof Kozlowski Cc: Marek Szyprowski, Alim Akhtar, linux-phy, Krzysztof Kozlowski On 7/6/21 11:06 AM, Chanho Park wrote: > Instead of using exynos7 ufs definition in phy-exynos7-ufs.h, we should > put it into phy-exynos7-ufs.c to be included different objects or units. > > Change-Id: Iddd3662445fe5373c254f994045b451b443fb91c Remove Change-Id. Best Regards, Jaehoon Chung > Suggested-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> > Signed-off-by: Chanho Park <chanho61.park@samsung.com> > --- > drivers/phy/samsung/Makefile | 3 ++- > .../samsung/{phy-exynos7-ufs.h => phy-exynos7-ufs.c} | 11 +++++------ > drivers/phy/samsung/phy-samsung-ufs.h | 4 +++- > 3 files changed, 10 insertions(+), 8 deletions(-) > rename drivers/phy/samsung/{phy-exynos7-ufs.h => phy-exynos7-ufs.c} (93%) > > diff --git a/drivers/phy/samsung/Makefile b/drivers/phy/samsung/Makefile > index 3959100fe8a2..d55d9aa5b932 100644 > --- a/drivers/phy/samsung/Makefile > +++ b/drivers/phy/samsung/Makefile > @@ -2,7 +2,8 @@ > obj-$(CONFIG_PHY_EXYNOS_DP_VIDEO) += phy-exynos-dp-video.o > obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO) += phy-exynos-mipi-video.o > obj-$(CONFIG_PHY_EXYNOS_PCIE) += phy-exynos-pcie.o > -obj-$(CONFIG_PHY_SAMSUNG_UFS) += phy-samsung-ufs.o > +obj-$(CONFIG_PHY_SAMSUNG_UFS) += phy-samsung-ufs.o \ > + phy-exynos7-ufs.o > obj-$(CONFIG_PHY_SAMSUNG_USB2) += phy-exynos-usb2.o > phy-exynos-usb2-y += phy-samsung-usb2.o > phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o > diff --git a/drivers/phy/samsung/phy-exynos7-ufs.h b/drivers/phy/samsung/phy-exynos7-ufs.c > similarity index 93% > rename from drivers/phy/samsung/phy-exynos7-ufs.h > rename to drivers/phy/samsung/phy-exynos7-ufs.c > index 518923141958..657b58319c14 100644 > --- a/drivers/phy/samsung/phy-exynos7-ufs.h > +++ b/drivers/phy/samsung/phy-exynos7-ufs.c > @@ -1,11 +1,12 @@ > -/* SPDX-License-Identifier: GPL-2.0-only */ > +// SPDX-License-Identifier: GPL-2.0-only > /* > * UFS PHY driver data for Samsung EXYNOS7 SoC > * > * Copyright (C) 2020 Samsung Electronics Co., Ltd. > */ > -#ifndef _PHY_EXYNOS7_UFS_H_ > -#define _PHY_EXYNOS7_UFS_H_ > + > +#include <linux/io.h> > +#include <linux/phy/phy.h> > > #include "phy-samsung-ufs.h" > > @@ -68,7 +69,7 @@ static const struct samsung_ufs_phy_cfg *exynos7_ufs_phy_cfgs[CFG_TAG_MAX] = { > [CFG_POST_PWR_HS] = exynos7_post_pwr_hs_cfg, > }; > > -static struct samsung_ufs_phy_drvdata exynos7_ufs_phy = { > +const struct samsung_ufs_phy_drvdata exynos7_ufs_phy = { > .cfg = exynos7_ufs_phy_cfgs, > .isol = { > .offset = EXYNOS7_EMBEDDED_COMBO_PHY_CTRL, > @@ -77,5 +78,3 @@ static struct samsung_ufs_phy_drvdata exynos7_ufs_phy = { > }, > .has_symbol_clk = 1, > }; > - > -#endif /* _PHY_EXYNOS7_UFS_H_ */ > diff --git a/drivers/phy/samsung/phy-samsung-ufs.h b/drivers/phy/samsung/phy-samsung-ufs.h > index 5de78710524c..1532d239ff0e 100644 > --- a/drivers/phy/samsung/phy-samsung-ufs.h > +++ b/drivers/phy/samsung/phy-samsung-ufs.h > @@ -10,6 +10,8 @@ > #ifndef _PHY_SAMSUNG_UFS_ > #define _PHY_SAMSUNG_UFS_ > > +#include <linux/regmap.h> > + > #define PHY_COMN_BLK 1 > #define PHY_TRSV_BLK 2 > #define END_UFS_PHY_CFG { 0 } > @@ -134,6 +136,6 @@ static inline void samsung_ufs_phy_ctrl_isol( > phy->isol->mask, isol ? 0 : phy->isol->en); > } > > -#include "phy-exynos7-ufs.h" > +extern const struct samsung_ufs_phy_drvdata exynos7_ufs_phy; > > #endif /* _PHY_SAMSUNG_UFS_ */ > -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH v2 1/2] phy: samsung-ufs: move phy-exynos7-ufs header 2021-07-06 2:10 ` Jaehoon Chung @ 2021-07-06 2:14 ` Chanho Park 0 siblings, 0 replies; 6+ messages in thread From: Chanho Park @ 2021-07-06 2:14 UTC (permalink / raw) To: 'Jaehoon Chung', 'Kishon Vijay Abraham I', 'Vinod Koul', 'Krzysztof Kozlowski' Cc: 'Marek Szyprowski', 'Alim Akhtar', linux-phy, 'Krzysztof Kozlowski' > > Change-Id: Iddd3662445fe5373c254f994045b451b443fb91c > > Remove Change-Id. Oops. I forgot to remove this. Thanks. Best Regards, Chanho Park -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <CGME20210706020611epcas2p47fd1367425d1bac79c7ec983c21086b8@epcas2p4.samsung.com>]
* [PATCH v2 2/2] phy: samsung-ufs: support exynosauto ufs phy driver [not found] ` <CGME20210706020611epcas2p47fd1367425d1bac79c7ec983c21086b8@epcas2p4.samsung.com> @ 2021-07-06 2:06 ` Chanho Park 2021-07-06 2:09 ` Jaehoon Chung 0 siblings, 1 reply; 6+ messages in thread From: Chanho Park @ 2021-07-06 2:06 UTC (permalink / raw) To: Kishon Vijay Abraham I, Vinod Koul, Krzysztof Kozlowski Cc: Marek Szyprowski, Jaehoon Chung, Alim Akhtar, linux-phy, Chanho Park This patch adds to support phy-exynosautov9-ufs driver for ExynosAuto v9 series SoCs. The patch adds "samsung,exynosautov9-ufs-phy" compatible. Unlike previous exynos ufs phy, the chip uses 0x50 offset as PHY_TRSV_REG_CFG_OFFSET. Change-Id: I4ea333d4565af537c26a8876d1b27144eea3c3c6 Signed-off-by: Chanho Park <chanho61.park@samsung.com> --- .../bindings/phy/samsung,ufs-phy.yaml | 1 + drivers/phy/samsung/Makefile | 3 +- drivers/phy/samsung/phy-exynosautov9-ufs.c | 70 +++++++++++++++++++ drivers/phy/samsung/phy-samsung-ufs.c | 3 + drivers/phy/samsung/phy-samsung-ufs.h | 8 ++- 5 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 drivers/phy/samsung/phy-exynosautov9-ufs.c diff --git a/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml b/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml index 636cc501b54f..f6ed1a005e7a 100644 --- a/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml +++ b/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml @@ -16,6 +16,7 @@ properties: compatible: enum: - samsung,exynos7-ufs-phy + - samsung,exynosautov9-ufs-phy reg: maxItems: 1 diff --git a/drivers/phy/samsung/Makefile b/drivers/phy/samsung/Makefile index d55d9aa5b932..ab87b71cd90f 100644 --- a/drivers/phy/samsung/Makefile +++ b/drivers/phy/samsung/Makefile @@ -3,7 +3,8 @@ obj-$(CONFIG_PHY_EXYNOS_DP_VIDEO) += phy-exynos-dp-video.o obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO) += phy-exynos-mipi-video.o obj-$(CONFIG_PHY_EXYNOS_PCIE) += phy-exynos-pcie.o obj-$(CONFIG_PHY_SAMSUNG_UFS) += phy-samsung-ufs.o \ - phy-exynos7-ufs.o + phy-exynos7-ufs.o \ + phy-exynosautov9-ufs.o obj-$(CONFIG_PHY_SAMSUNG_USB2) += phy-exynos-usb2.o phy-exynos-usb2-y += phy-samsung-usb2.o phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o diff --git a/drivers/phy/samsung/phy-exynosautov9-ufs.c b/drivers/phy/samsung/phy-exynosautov9-ufs.c new file mode 100644 index 000000000000..9ab79e018724 --- /dev/null +++ b/drivers/phy/samsung/phy-exynosautov9-ufs.c @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * UFS PHY driver data for Samsung EXYNOSAUTO v9 SoC + * + * Copyright (C) 2021 Samsung Electronics Co., Ltd. + */ + +#include <linux/io.h> +#include <linux/phy/phy.h> + +#include "phy-samsung-ufs.h" + +#define EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL 0x728 +#define EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_MASK 0x1 +#define EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_EN BIT(0) + +#define PHY_TRSV_REG_CFG_AUTOV9(o, v, d) \ + PHY_TRSV_REG_CFG_OFFSET(o, v, d, 0x50) + +/* Calibration for phy initialization */ +static const struct samsung_ufs_phy_cfg exynosautov9_pre_init_cfg[] = { + PHY_COMN_REG_CFG(0x023, 0x80, PWR_MODE_ANY), + PHY_COMN_REG_CFG(0x01d, 0x10, PWR_MODE_ANY), + + PHY_TRSV_REG_CFG_AUTOV9(0x044, 0xb5, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x04d, 0x43, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x05b, 0x20, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x05e, 0xc0, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x038, 0x12, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x059, 0x58, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x06c, 0x18, PWR_MODE_ANY), + PHY_TRSV_REG_CFG_AUTOV9(0x06d, 0x02, PWR_MODE_ANY), + + PHY_COMN_REG_CFG(0x023, 0xc0, PWR_MODE_ANY), + PHY_COMN_REG_CFG(0x023, 0x00, PWR_MODE_ANY), + + PHY_TRSV_REG_CFG(0x042, 0x5d, PWR_MODE_ANY), + PHY_TRSV_REG_CFG(0x043, 0x80, PWR_MODE_ANY), + + END_UFS_PHY_CFG, +}; + +/* Calibration for HS mode series A/B */ +static const struct samsung_ufs_phy_cfg exynosautov9_pre_pwr_hs_cfg[] = { + PHY_TRSV_REG_CFG(0x032, 0xbc, PWR_MODE_HS_ANY), + PHY_TRSV_REG_CFG(0x03c, 0x7f, PWR_MODE_HS_ANY), + PHY_TRSV_REG_CFG(0x048, 0xc0, PWR_MODE_HS_ANY), + + PHY_TRSV_REG_CFG(0x04a, 0x00, PWR_MODE_HS_G3_SER_B), + PHY_TRSV_REG_CFG(0x04b, 0x10, PWR_MODE_HS_G1_SER_B | + PWR_MODE_HS_G3_SER_B), + PHY_TRSV_REG_CFG(0x04d, 0x63, PWR_MODE_HS_G3_SER_B), + + END_UFS_PHY_CFG, +}; + +static const struct samsung_ufs_phy_cfg *exynosautov9_ufs_phy_cfgs[CFG_TAG_MAX] = { + [CFG_PRE_INIT] = exynosautov9_pre_init_cfg, + [CFG_PRE_PWR_HS] = exynosautov9_pre_pwr_hs_cfg, +}; + +const struct samsung_ufs_phy_drvdata exynosautov9_ufs_phy = { + .cfg = exynosautov9_ufs_phy_cfgs, + .isol = { + .offset = EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL, + .mask = EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_MASK, + .en = EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_EN, + }, + .has_symbol_clk = 0, +}; diff --git a/drivers/phy/samsung/phy-samsung-ufs.c b/drivers/phy/samsung/phy-samsung-ufs.c index dd9ab1519d83..602ddef259eb 100644 --- a/drivers/phy/samsung/phy-samsung-ufs.c +++ b/drivers/phy/samsung/phy-samsung-ufs.c @@ -347,6 +347,9 @@ static const struct of_device_id samsung_ufs_phy_match[] = { { .compatible = "samsung,exynos7-ufs-phy", .data = &exynos7_ufs_phy, + }, { + .compatible = "samsung,exynosautov9-ufs-phy", + .data = &exynosautov9_ufs_phy, }, {}, }; diff --git a/drivers/phy/samsung/phy-samsung-ufs.h b/drivers/phy/samsung/phy-samsung-ufs.h index 1532d239ff0e..b9b85d55a2d5 100644 --- a/drivers/phy/samsung/phy-samsung-ufs.h +++ b/drivers/phy/samsung/phy-samsung-ufs.h @@ -26,14 +26,17 @@ .id = PHY_COMN_BLK, \ } -#define PHY_TRSV_REG_CFG(o, v, d) { \ +#define PHY_TRSV_REG_CFG_OFFSET(o, v, d, c) { \ .off_0 = PHY_APB_ADDR((o)), \ - .off_1 = PHY_APB_ADDR((o) + PHY_TRSV_CH_OFFSET), \ + .off_1 = PHY_APB_ADDR((o) + (c)), \ .val = (v), \ .desc = (d), \ .id = PHY_TRSV_BLK, \ } +#define PHY_TRSV_REG_CFG(o, v, d) \ + PHY_TRSV_REG_CFG_OFFSET(o, v, d, PHY_TRSV_CH_OFFSET) + /* UFS PHY registers */ #define PHY_PLL_LOCK_STATUS 0x1e #define PHY_CDR_LOCK_STATUS 0x5e @@ -137,5 +140,6 @@ static inline void samsung_ufs_phy_ctrl_isol( } extern const struct samsung_ufs_phy_drvdata exynos7_ufs_phy; +extern const struct samsung_ufs_phy_drvdata exynosautov9_ufs_phy; #endif /* _PHY_SAMSUNG_UFS_ */ -- 2.32.0 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] phy: samsung-ufs: support exynosauto ufs phy driver 2021-07-06 2:06 ` [PATCH v2 2/2] phy: samsung-ufs: support exynosauto ufs phy driver Chanho Park @ 2021-07-06 2:09 ` Jaehoon Chung 0 siblings, 0 replies; 6+ messages in thread From: Jaehoon Chung @ 2021-07-06 2:09 UTC (permalink / raw) To: Chanho Park, Kishon Vijay Abraham I, Vinod Koul, Krzysztof Kozlowski Cc: Marek Szyprowski, Alim Akhtar, linux-phy On 7/6/21 11:06 AM, Chanho Park wrote: > This patch adds to support phy-exynosautov9-ufs driver for ExynosAuto v9 > series SoCs. The patch adds "samsung,exynosautov9-ufs-phy" compatible. > Unlike previous exynos ufs phy, the chip uses 0x50 offset as > PHY_TRSV_REG_CFG_OFFSET. > > Change-Id: I4ea333d4565af537c26a8876d1b27144eea3c3c6 Remove Change-Id. Best Regards, Jaehoon Chung > Signed-off-by: Chanho Park <chanho61.park@samsung.com> > --- > .../bindings/phy/samsung,ufs-phy.yaml | 1 + > drivers/phy/samsung/Makefile | 3 +- > drivers/phy/samsung/phy-exynosautov9-ufs.c | 70 +++++++++++++++++++ > drivers/phy/samsung/phy-samsung-ufs.c | 3 + > drivers/phy/samsung/phy-samsung-ufs.h | 8 ++- > 5 files changed, 82 insertions(+), 3 deletions(-) > create mode 100644 drivers/phy/samsung/phy-exynosautov9-ufs.c > > diff --git a/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml b/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml > index 636cc501b54f..f6ed1a005e7a 100644 > --- a/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml > +++ b/Documentation/devicetree/bindings/phy/samsung,ufs-phy.yaml > @@ -16,6 +16,7 @@ properties: > compatible: > enum: > - samsung,exynos7-ufs-phy > + - samsung,exynosautov9-ufs-phy > > reg: > maxItems: 1 > diff --git a/drivers/phy/samsung/Makefile b/drivers/phy/samsung/Makefile > index d55d9aa5b932..ab87b71cd90f 100644 > --- a/drivers/phy/samsung/Makefile > +++ b/drivers/phy/samsung/Makefile > @@ -3,7 +3,8 @@ obj-$(CONFIG_PHY_EXYNOS_DP_VIDEO) += phy-exynos-dp-video.o > obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO) += phy-exynos-mipi-video.o > obj-$(CONFIG_PHY_EXYNOS_PCIE) += phy-exynos-pcie.o > obj-$(CONFIG_PHY_SAMSUNG_UFS) += phy-samsung-ufs.o \ > - phy-exynos7-ufs.o > + phy-exynos7-ufs.o \ > + phy-exynosautov9-ufs.o > obj-$(CONFIG_PHY_SAMSUNG_USB2) += phy-exynos-usb2.o > phy-exynos-usb2-y += phy-samsung-usb2.o > phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o > diff --git a/drivers/phy/samsung/phy-exynosautov9-ufs.c b/drivers/phy/samsung/phy-exynosautov9-ufs.c > new file mode 100644 > index 000000000000..9ab79e018724 > --- /dev/null > +++ b/drivers/phy/samsung/phy-exynosautov9-ufs.c > @@ -0,0 +1,70 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * UFS PHY driver data for Samsung EXYNOSAUTO v9 SoC > + * > + * Copyright (C) 2021 Samsung Electronics Co., Ltd. > + */ > + > +#include <linux/io.h> > +#include <linux/phy/phy.h> > + > +#include "phy-samsung-ufs.h" > + > +#define EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL 0x728 > +#define EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_MASK 0x1 > +#define EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_EN BIT(0) > + > +#define PHY_TRSV_REG_CFG_AUTOV9(o, v, d) \ > + PHY_TRSV_REG_CFG_OFFSET(o, v, d, 0x50) > + > +/* Calibration for phy initialization */ > +static const struct samsung_ufs_phy_cfg exynosautov9_pre_init_cfg[] = { > + PHY_COMN_REG_CFG(0x023, 0x80, PWR_MODE_ANY), > + PHY_COMN_REG_CFG(0x01d, 0x10, PWR_MODE_ANY), > + > + PHY_TRSV_REG_CFG_AUTOV9(0x044, 0xb5, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x04d, 0x43, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x05b, 0x20, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x05e, 0xc0, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x038, 0x12, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x059, 0x58, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x06c, 0x18, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG_AUTOV9(0x06d, 0x02, PWR_MODE_ANY), > + > + PHY_COMN_REG_CFG(0x023, 0xc0, PWR_MODE_ANY), > + PHY_COMN_REG_CFG(0x023, 0x00, PWR_MODE_ANY), > + > + PHY_TRSV_REG_CFG(0x042, 0x5d, PWR_MODE_ANY), > + PHY_TRSV_REG_CFG(0x043, 0x80, PWR_MODE_ANY), > + > + END_UFS_PHY_CFG, > +}; > + > +/* Calibration for HS mode series A/B */ > +static const struct samsung_ufs_phy_cfg exynosautov9_pre_pwr_hs_cfg[] = { > + PHY_TRSV_REG_CFG(0x032, 0xbc, PWR_MODE_HS_ANY), > + PHY_TRSV_REG_CFG(0x03c, 0x7f, PWR_MODE_HS_ANY), > + PHY_TRSV_REG_CFG(0x048, 0xc0, PWR_MODE_HS_ANY), > + > + PHY_TRSV_REG_CFG(0x04a, 0x00, PWR_MODE_HS_G3_SER_B), > + PHY_TRSV_REG_CFG(0x04b, 0x10, PWR_MODE_HS_G1_SER_B | > + PWR_MODE_HS_G3_SER_B), > + PHY_TRSV_REG_CFG(0x04d, 0x63, PWR_MODE_HS_G3_SER_B), > + > + END_UFS_PHY_CFG, > +}; > + > +static const struct samsung_ufs_phy_cfg *exynosautov9_ufs_phy_cfgs[CFG_TAG_MAX] = { > + [CFG_PRE_INIT] = exynosautov9_pre_init_cfg, > + [CFG_PRE_PWR_HS] = exynosautov9_pre_pwr_hs_cfg, > +}; > + > +const struct samsung_ufs_phy_drvdata exynosautov9_ufs_phy = { > + .cfg = exynosautov9_ufs_phy_cfgs, > + .isol = { > + .offset = EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL, > + .mask = EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_MASK, > + .en = EXYNOSAUTOV9_EMBEDDED_COMBO_PHY_CTRL_EN, > + }, > + .has_symbol_clk = 0, > +}; > diff --git a/drivers/phy/samsung/phy-samsung-ufs.c b/drivers/phy/samsung/phy-samsung-ufs.c > index dd9ab1519d83..602ddef259eb 100644 > --- a/drivers/phy/samsung/phy-samsung-ufs.c > +++ b/drivers/phy/samsung/phy-samsung-ufs.c > @@ -347,6 +347,9 @@ static const struct of_device_id samsung_ufs_phy_match[] = { > { > .compatible = "samsung,exynos7-ufs-phy", > .data = &exynos7_ufs_phy, > + }, { > + .compatible = "samsung,exynosautov9-ufs-phy", > + .data = &exynosautov9_ufs_phy, > }, > {}, > }; > diff --git a/drivers/phy/samsung/phy-samsung-ufs.h b/drivers/phy/samsung/phy-samsung-ufs.h > index 1532d239ff0e..b9b85d55a2d5 100644 > --- a/drivers/phy/samsung/phy-samsung-ufs.h > +++ b/drivers/phy/samsung/phy-samsung-ufs.h > @@ -26,14 +26,17 @@ > .id = PHY_COMN_BLK, \ > } > > -#define PHY_TRSV_REG_CFG(o, v, d) { \ > +#define PHY_TRSV_REG_CFG_OFFSET(o, v, d, c) { \ > .off_0 = PHY_APB_ADDR((o)), \ > - .off_1 = PHY_APB_ADDR((o) + PHY_TRSV_CH_OFFSET), \ > + .off_1 = PHY_APB_ADDR((o) + (c)), \ > .val = (v), \ > .desc = (d), \ > .id = PHY_TRSV_BLK, \ > } > > +#define PHY_TRSV_REG_CFG(o, v, d) \ > + PHY_TRSV_REG_CFG_OFFSET(o, v, d, PHY_TRSV_CH_OFFSET) > + > /* UFS PHY registers */ > #define PHY_PLL_LOCK_STATUS 0x1e > #define PHY_CDR_LOCK_STATUS 0x5e > @@ -137,5 +140,6 @@ static inline void samsung_ufs_phy_ctrl_isol( > } > > extern const struct samsung_ufs_phy_drvdata exynos7_ufs_phy; > +extern const struct samsung_ufs_phy_drvdata exynosautov9_ufs_phy; > > #endif /* _PHY_SAMSUNG_UFS_ */ > -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-07-06 2:15 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20210706020608epcas2p1ff6e0073edfa43de92ebd6c754df18cf@epcas2p1.samsung.com> 2021-07-06 2:06 ` [PATCH v2 0/2] Support exynosautov9 ufs phy driver Chanho Park [not found] ` <CGME20210706020609epcas2p3af9ad22d849366dd850214b5c2e9f9dd@epcas2p3.samsung.com> 2021-07-06 2:06 ` [PATCH v2 1/2] phy: samsung-ufs: move phy-exynos7-ufs header Chanho Park 2021-07-06 2:10 ` Jaehoon Chung 2021-07-06 2:14 ` Chanho Park [not found] ` <CGME20210706020611epcas2p47fd1367425d1bac79c7ec983c21086b8@epcas2p4.samsung.com> 2021-07-06 2:06 ` [PATCH v2 2/2] phy: samsung-ufs: support exynosauto ufs phy driver Chanho Park 2021-07-06 2:09 ` Jaehoon Chung
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.