aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/patches-4.14/0119-soc-mediatek-pwrap-refactor-pwrap_init-for-the-vario.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mediatek/patches-4.14/0119-soc-mediatek-pwrap-refactor-pwrap_init-for-the-vario.patch')
-rw-r--r--target/linux/mediatek/patches-4.14/0119-soc-mediatek-pwrap-refactor-pwrap_init-for-the-vario.patch227
1 files changed, 0 insertions, 227 deletions
diff --git a/target/linux/mediatek/patches-4.14/0119-soc-mediatek-pwrap-refactor-pwrap_init-for-the-vario.patch b/target/linux/mediatek/patches-4.14/0119-soc-mediatek-pwrap-refactor-pwrap_init-for-the-vario.patch
deleted file mode 100644
index a9f720c90a..0000000000
--- a/target/linux/mediatek/patches-4.14/0119-soc-mediatek-pwrap-refactor-pwrap_init-for-the-vario.patch
+++ /dev/null
@@ -1,227 +0,0 @@
-From 16bebe4ad52083316907fb7149c797cd331f5948 Mon Sep 17 00:00:00 2001
-From: Sean Wang <sean.wang@mediatek.com>
-Date: Wed, 18 Oct 2017 16:28:45 +0800
-Subject: [PATCH 119/224] soc: mediatek: pwrap: refactor pwrap_init for the
- various PMIC types
-
-pwrap initialization is highly associated with the base SoC and the
-target PMICs, so slight refactorization is made here for allowing
-pwrap_init to run on those PMICs with different capability from the
-previous MediaTek PMICs and the determination for the enablement of the
-pwrap capability depending on PMIC type. Apart from this, the patch
-makes the driver more extensible especially when more PMICs join into
-the pwrap driver.
-
-Signed-off-by: Chenglin Xu <chenglin.xu@mediatek.com>
-Signed-off-by: Sean Wang <sean.wang@mediatek.com>
-Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
----
- drivers/soc/mediatek/mtk-pmic-wrap.c | 130 ++++++++++++++++++++++++-----------
- 1 file changed, 90 insertions(+), 40 deletions(-)
-
---- a/drivers/soc/mediatek/mtk-pmic-wrap.c
-+++ b/drivers/soc/mediatek/mtk-pmic-wrap.c
-@@ -70,6 +70,12 @@
- PWRAP_WDT_SRC_EN_HARB_STAUPD_DLE | \
- PWRAP_WDT_SRC_EN_HARB_STAUPD_ALE)
-
-+/* Group of bits used for shown slave capability */
-+#define PWRAP_SLV_CAP_SPI BIT(0)
-+#define PWRAP_SLV_CAP_DUALIO BIT(1)
-+#define PWRAP_SLV_CAP_SECURITY BIT(2)
-+#define HAS_CAP(_c, _x) (((_c) & (_x)) == (_x))
-+
- /* defines for slave device wrapper registers */
- enum dew_regs {
- PWRAP_DEW_BASE,
-@@ -501,6 +507,8 @@ struct pmic_wrapper;
- struct pwrap_slv_type {
- const u32 *dew_regs;
- enum pmic_type type;
-+ /* Flags indicating the capability for the target slave */
-+ u32 caps;
- /*
- * pwrap operations are highly associated with the PMIC types,
- * so the pointers added increases flexibility allowing determination
-@@ -787,6 +795,37 @@ static int pwrap_init_sidly(struct pmic_
- return 0;
- }
-
-+static int pwrap_init_dual_io(struct pmic_wrapper *wrp)
-+{
-+ int ret;
-+ u32 rdata;
-+
-+ /* Enable dual IO mode */
-+ pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1);
-+
-+ /* Check IDLE & INIT_DONE in advance */
-+ ret = pwrap_wait_for_state(wrp,
-+ pwrap_is_fsm_idle_and_sync_idle);
-+ if (ret) {
-+ dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret);
-+ return ret;
-+ }
-+
-+ pwrap_writel(wrp, 1, PWRAP_DIO_EN);
-+
-+ /* Read Test */
-+ pwrap_read(wrp,
-+ wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], &rdata);
-+ if (rdata != PWRAP_DEW_READ_TEST_VAL) {
-+ dev_err(wrp->dev,
-+ "Read failed on DIO mode: 0x%04x!=0x%04x\n",
-+ PWRAP_DEW_READ_TEST_VAL, rdata);
-+ return -EFAULT;
-+ }
-+
-+ return 0;
-+}
-+
- static int pwrap_mt8135_init_reg_clock(struct pmic_wrapper *wrp)
- {
- pwrap_writel(wrp, 0x4, PWRAP_CSHEXT);
-@@ -935,6 +974,30 @@ static int pwrap_init_cipher(struct pmic
- return 0;
- }
-
-+static int pwrap_init_security(struct pmic_wrapper *wrp)
-+{
-+ int ret;
-+
-+ /* Enable encryption */
-+ ret = pwrap_init_cipher(wrp);
-+ if (ret)
-+ return ret;
-+
-+ /* Signature checking - using CRC */
-+ if (pwrap_write(wrp,
-+ wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1))
-+ return -EFAULT;
-+
-+ pwrap_writel(wrp, 0x1, PWRAP_CRC_EN);
-+ pwrap_writel(wrp, 0x0, PWRAP_SIG_MODE);
-+ pwrap_writel(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL],
-+ PWRAP_SIG_ADR);
-+ pwrap_writel(wrp,
-+ wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN);
-+
-+ return 0;
-+}
-+
- static int pwrap_mt8135_init_soc_specific(struct pmic_wrapper *wrp)
- {
- /* enable pwrap events and pwrap bridge in AP side */
-@@ -995,7 +1058,6 @@ static int pwrap_mt2701_init_soc_specifi
- static int pwrap_init(struct pmic_wrapper *wrp)
- {
- int ret;
-- u32 rdata;
-
- reset_control_reset(wrp->rstc);
- if (wrp->rstc_bridge)
-@@ -1007,10 +1069,12 @@ static int pwrap_init(struct pmic_wrappe
- pwrap_writel(wrp, 0, PWRAP_DCM_DBC_PRD);
- }
-
-- /* Reset SPI slave */
-- ret = pwrap_reset_spislave(wrp);
-- if (ret)
-- return ret;
-+ if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) {
-+ /* Reset SPI slave */
-+ ret = pwrap_reset_spislave(wrp);
-+ if (ret)
-+ return ret;
-+ }
-
- pwrap_writel(wrp, 1, PWRAP_WRAP_EN);
-
-@@ -1022,45 +1086,26 @@ static int pwrap_init(struct pmic_wrappe
- if (ret)
- return ret;
-
-- /* Setup serial input delay */
-- ret = pwrap_init_sidly(wrp);
-- if (ret)
-- return ret;
--
-- /* Enable dual IO mode */
-- pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1);
--
-- /* Check IDLE & INIT_DONE in advance */
-- ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle_and_sync_idle);
-- if (ret) {
-- dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret);
-- return ret;
-+ if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) {
-+ /* Setup serial input delay */
-+ ret = pwrap_init_sidly(wrp);
-+ if (ret)
-+ return ret;
- }
-
-- pwrap_writel(wrp, 1, PWRAP_DIO_EN);
--
-- /* Read Test */
-- pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], &rdata);
-- if (rdata != PWRAP_DEW_READ_TEST_VAL) {
-- dev_err(wrp->dev, "Read test failed after switch to DIO mode: 0x%04x != 0x%04x\n",
-- PWRAP_DEW_READ_TEST_VAL, rdata);
-- return -EFAULT;
-+ if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_DUALIO)) {
-+ /* Enable dual I/O mode */
-+ ret = pwrap_init_dual_io(wrp);
-+ if (ret)
-+ return ret;
- }
-
-- /* Enable encryption */
-- ret = pwrap_init_cipher(wrp);
-- if (ret)
-- return ret;
--
-- /* Signature checking - using CRC */
-- if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1))
-- return -EFAULT;
--
-- pwrap_writel(wrp, 0x1, PWRAP_CRC_EN);
-- pwrap_writel(wrp, 0x0, PWRAP_SIG_MODE);
-- pwrap_writel(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL],
-- PWRAP_SIG_ADR);
-- pwrap_writel(wrp, wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN);
-+ if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SECURITY)) {
-+ /* Enable security on bus */
-+ ret = pwrap_init_security(wrp);
-+ if (ret)
-+ return ret;
-+ }
-
- if (wrp->master->type == PWRAP_MT8135)
- pwrap_writel(wrp, 0x7, PWRAP_RRARB_EN);
-@@ -1116,6 +1161,8 @@ static const struct regmap_config pwrap_
- static const struct pwrap_slv_type pmic_mt6323 = {
- .dew_regs = mt6323_regs,
- .type = PMIC_MT6323,
-+ .caps = PWRAP_SLV_CAP_SPI | PWRAP_SLV_CAP_DUALIO |
-+ PWRAP_SLV_CAP_SECURITY,
- .pwrap_read = pwrap_read16,
- .pwrap_write = pwrap_write16,
- };
-@@ -1123,6 +1170,7 @@ static const struct pwrap_slv_type pmic_
- static const struct pwrap_slv_type pmic_mt6380 = {
- .dew_regs = NULL,
- .type = PMIC_MT6380,
-+ .caps = 0,
- .pwrap_read = pwrap_read32,
- .pwrap_write = pwrap_write32,
- };
-@@ -1130,6 +1178,8 @@ static const struct pwrap_slv_type pmic_
- static const struct pwrap_slv_type pmic_mt6397 = {
- .dew_regs = mt6397_regs,
- .type = PMIC_MT6397,
-+ .caps = PWRAP_SLV_CAP_SPI | PWRAP_SLV_CAP_DUALIO |
-+ PWRAP_SLV_CAP_SECURITY,
- .pwrap_read = pwrap_read16,
- .pwrap_write = pwrap_write16,
- };