Commit 4334f30e authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'char-misc-5.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc driver fixes from Greg KH:
 "Here are some small driver fixes for 5.7-rc5 that resolve a number of
  minor reported issues:

   - mhi bus driver fixes found as people actually use the code

   - phy driver fixes and compat string additions

   - most driver fix due to link order changing when the core moved out
     of staging

   - mei driver fix

   - interconnect build warning fix

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'char-misc-5.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  bus: mhi: core: Fix channel device name conflict
  bus: mhi: core: Fix typo in comment
  bus: mhi: core: Offload register accesses to the controller
  bus: mhi: core: Remove link_status() callback
  bus: mhi: core: Make sure to powerdown if mhi_sync_power_up fails
  bus: mhi: Fix parsing of mhi_flags
  mei: me: disable mei interface on LBG servers.
  phy: qualcomm: usb-hs-28nm: Prepare clocks in init
  MAINTAINERS: Add Vinod Koul as Generic PHY co-maintainer
  interconnect: qcom: Move the static keyword to the front of declaration
  most: core: use function subsys_initcall()
  bus: mhi: core: Fix a NULL vs IS_ERR check in mhi_create_devices()
  phy: qcom-qusb2: Re add "qcom,sdm845-qusb2-phy" compat string
  phy: tegra: Select USB_COMMON for usb_get_maximum_speed()
parents c61529f6 f0e1d3ac
...@@ -7119,9 +7119,10 @@ F: include/uapi/asm-generic/ ...@@ -7119,9 +7119,10 @@ F: include/uapi/asm-generic/
GENERIC PHY FRAMEWORK GENERIC PHY FRAMEWORK
M: Kishon Vijay Abraham I <kishon@ti.com> M: Kishon Vijay Abraham I <kishon@ti.com>
M: Vinod Koul <vkoul@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Supported S: Supported
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git
F: Documentation/devicetree/bindings/phy/ F: Documentation/devicetree/bindings/phy/
F: drivers/phy/ F: drivers/phy/
F: include/linux/phy/ F: include/linux/phy/
......
...@@ -812,10 +812,9 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl, ...@@ -812,10 +812,9 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
if (!mhi_cntrl) if (!mhi_cntrl)
return -EINVAL; return -EINVAL;
if (!mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put) if (!mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put ||
return -EINVAL; !mhi_cntrl->status_cb || !mhi_cntrl->read_reg ||
!mhi_cntrl->write_reg)
if (!mhi_cntrl->status_cb || !mhi_cntrl->link_status)
return -EINVAL; return -EINVAL;
ret = parse_config(mhi_cntrl, config); ret = parse_config(mhi_cntrl, config);
......
...@@ -11,9 +11,6 @@ ...@@ -11,9 +11,6 @@
extern struct bus_type mhi_bus_type; extern struct bus_type mhi_bus_type;
/* MHI MMIO register mapping */
#define PCI_INVALID_READ(val) (val == U32_MAX)
#define MHIREGLEN (0x0) #define MHIREGLEN (0x0)
#define MHIREGLEN_MHIREGLEN_MASK (0xFFFFFFFF) #define MHIREGLEN_MHIREGLEN_MASK (0xFFFFFFFF)
#define MHIREGLEN_MHIREGLEN_SHIFT (0) #define MHIREGLEN_MHIREGLEN_SHIFT (0)
......
...@@ -18,16 +18,7 @@ ...@@ -18,16 +18,7 @@
int __must_check mhi_read_reg(struct mhi_controller *mhi_cntrl, int __must_check mhi_read_reg(struct mhi_controller *mhi_cntrl,
void __iomem *base, u32 offset, u32 *out) void __iomem *base, u32 offset, u32 *out)
{ {
u32 tmp = readl(base + offset); return mhi_cntrl->read_reg(mhi_cntrl, base + offset, out);
/* If there is any unexpected value, query the link status */
if (PCI_INVALID_READ(tmp) &&
mhi_cntrl->link_status(mhi_cntrl))
return -EIO;
*out = tmp;
return 0;
} }
int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl, int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl,
...@@ -49,7 +40,7 @@ int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl, ...@@ -49,7 +40,7 @@ int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl,
void mhi_write_reg(struct mhi_controller *mhi_cntrl, void __iomem *base, void mhi_write_reg(struct mhi_controller *mhi_cntrl, void __iomem *base,
u32 offset, u32 val) u32 offset, u32 val)
{ {
writel(val, base + offset); mhi_cntrl->write_reg(mhi_cntrl, base + offset, val);
} }
void mhi_write_reg_field(struct mhi_controller *mhi_cntrl, void __iomem *base, void mhi_write_reg_field(struct mhi_controller *mhi_cntrl, void __iomem *base,
...@@ -294,7 +285,7 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl) ...@@ -294,7 +285,7 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl)
!(mhi_chan->ee_mask & BIT(mhi_cntrl->ee))) !(mhi_chan->ee_mask & BIT(mhi_cntrl->ee)))
continue; continue;
mhi_dev = mhi_alloc_device(mhi_cntrl); mhi_dev = mhi_alloc_device(mhi_cntrl);
if (!mhi_dev) if (IS_ERR(mhi_dev))
return; return;
mhi_dev->dev_type = MHI_DEVICE_XFER; mhi_dev->dev_type = MHI_DEVICE_XFER;
...@@ -336,7 +327,8 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl) ...@@ -336,7 +327,8 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl)
/* Channel name is same for both UL and DL */ /* Channel name is same for both UL and DL */
mhi_dev->chan_name = mhi_chan->name; mhi_dev->chan_name = mhi_chan->name;
dev_set_name(&mhi_dev->dev, "%04x_%s", mhi_chan->chan, dev_set_name(&mhi_dev->dev, "%s_%s",
dev_name(mhi_cntrl->cntrl_dev),
mhi_dev->chan_name); mhi_dev->chan_name);
/* Init wakeup source if available */ /* Init wakeup source if available */
......
...@@ -902,7 +902,11 @@ int mhi_sync_power_up(struct mhi_controller *mhi_cntrl) ...@@ -902,7 +902,11 @@ int mhi_sync_power_up(struct mhi_controller *mhi_cntrl)
MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state), MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state),
msecs_to_jiffies(mhi_cntrl->timeout_ms)); msecs_to_jiffies(mhi_cntrl->timeout_ms));
return (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) ? 0 : -EIO; ret = (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) ? 0 : -ETIMEDOUT;
if (ret)
mhi_power_down(mhi_cntrl, false);
return ret;
} }
EXPORT_SYMBOL(mhi_sync_power_up); EXPORT_SYMBOL(mhi_sync_power_up);
......
...@@ -78,7 +78,7 @@ static struct qcom_icc_node *sdm845_osm_l3_nodes[] = { ...@@ -78,7 +78,7 @@ static struct qcom_icc_node *sdm845_osm_l3_nodes[] = {
[SLAVE_OSM_L3] = &sdm845_osm_l3, [SLAVE_OSM_L3] = &sdm845_osm_l3,
}; };
const static struct qcom_icc_desc sdm845_icc_osm_l3 = { static const struct qcom_icc_desc sdm845_icc_osm_l3 = {
.nodes = sdm845_osm_l3_nodes, .nodes = sdm845_osm_l3_nodes,
.num_nodes = ARRAY_SIZE(sdm845_osm_l3_nodes), .num_nodes = ARRAY_SIZE(sdm845_osm_l3_nodes),
}; };
...@@ -91,7 +91,7 @@ static struct qcom_icc_node *sc7180_osm_l3_nodes[] = { ...@@ -91,7 +91,7 @@ static struct qcom_icc_node *sc7180_osm_l3_nodes[] = {
[SLAVE_OSM_L3] = &sc7180_osm_l3, [SLAVE_OSM_L3] = &sc7180_osm_l3,
}; };
const static struct qcom_icc_desc sc7180_icc_osm_l3 = { static const struct qcom_icc_desc sc7180_icc_osm_l3 = {
.nodes = sc7180_osm_l3_nodes, .nodes = sc7180_osm_l3_nodes,
.num_nodes = ARRAY_SIZE(sc7180_osm_l3_nodes), .num_nodes = ARRAY_SIZE(sc7180_osm_l3_nodes),
}; };
......
...@@ -192,7 +192,7 @@ static struct qcom_icc_node *aggre1_noc_nodes[] = { ...@@ -192,7 +192,7 @@ static struct qcom_icc_node *aggre1_noc_nodes[] = {
[SLAVE_ANOC_PCIE_A1NOC_SNOC] = &qns_pcie_a1noc_snoc, [SLAVE_ANOC_PCIE_A1NOC_SNOC] = &qns_pcie_a1noc_snoc,
}; };
const static struct qcom_icc_desc sdm845_aggre1_noc = { static const struct qcom_icc_desc sdm845_aggre1_noc = {
.nodes = aggre1_noc_nodes, .nodes = aggre1_noc_nodes,
.num_nodes = ARRAY_SIZE(aggre1_noc_nodes), .num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
.bcms = aggre1_noc_bcms, .bcms = aggre1_noc_bcms,
...@@ -220,7 +220,7 @@ static struct qcom_icc_node *aggre2_noc_nodes[] = { ...@@ -220,7 +220,7 @@ static struct qcom_icc_node *aggre2_noc_nodes[] = {
[SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc, [SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc,
}; };
const static struct qcom_icc_desc sdm845_aggre2_noc = { static const struct qcom_icc_desc sdm845_aggre2_noc = {
.nodes = aggre2_noc_nodes, .nodes = aggre2_noc_nodes,
.num_nodes = ARRAY_SIZE(aggre2_noc_nodes), .num_nodes = ARRAY_SIZE(aggre2_noc_nodes),
.bcms = aggre2_noc_bcms, .bcms = aggre2_noc_bcms,
...@@ -281,7 +281,7 @@ static struct qcom_icc_node *config_noc_nodes[] = { ...@@ -281,7 +281,7 @@ static struct qcom_icc_node *config_noc_nodes[] = {
[SLAVE_SERVICE_CNOC] = &srvc_cnoc, [SLAVE_SERVICE_CNOC] = &srvc_cnoc,
}; };
const static struct qcom_icc_desc sdm845_config_noc = { static const struct qcom_icc_desc sdm845_config_noc = {
.nodes = config_noc_nodes, .nodes = config_noc_nodes,
.num_nodes = ARRAY_SIZE(config_noc_nodes), .num_nodes = ARRAY_SIZE(config_noc_nodes),
.bcms = config_noc_bcms, .bcms = config_noc_bcms,
...@@ -297,7 +297,7 @@ static struct qcom_icc_node *dc_noc_nodes[] = { ...@@ -297,7 +297,7 @@ static struct qcom_icc_node *dc_noc_nodes[] = {
[SLAVE_MEM_NOC_CFG] = &qhs_memnoc, [SLAVE_MEM_NOC_CFG] = &qhs_memnoc,
}; };
const static struct qcom_icc_desc sdm845_dc_noc = { static const struct qcom_icc_desc sdm845_dc_noc = {
.nodes = dc_noc_nodes, .nodes = dc_noc_nodes,
.num_nodes = ARRAY_SIZE(dc_noc_nodes), .num_nodes = ARRAY_SIZE(dc_noc_nodes),
.bcms = dc_noc_bcms, .bcms = dc_noc_bcms,
...@@ -315,7 +315,7 @@ static struct qcom_icc_node *gladiator_noc_nodes[] = { ...@@ -315,7 +315,7 @@ static struct qcom_icc_node *gladiator_noc_nodes[] = {
[SLAVE_SERVICE_GNOC] = &srvc_gnoc, [SLAVE_SERVICE_GNOC] = &srvc_gnoc,
}; };
const static struct qcom_icc_desc sdm845_gladiator_noc = { static const struct qcom_icc_desc sdm845_gladiator_noc = {
.nodes = gladiator_noc_nodes, .nodes = gladiator_noc_nodes,
.num_nodes = ARRAY_SIZE(gladiator_noc_nodes), .num_nodes = ARRAY_SIZE(gladiator_noc_nodes),
.bcms = gladiator_noc_bcms, .bcms = gladiator_noc_bcms,
...@@ -350,7 +350,7 @@ static struct qcom_icc_node *mem_noc_nodes[] = { ...@@ -350,7 +350,7 @@ static struct qcom_icc_node *mem_noc_nodes[] = {
[SLAVE_EBI1] = &ebi, [SLAVE_EBI1] = &ebi,
}; };
const static struct qcom_icc_desc sdm845_mem_noc = { static const struct qcom_icc_desc sdm845_mem_noc = {
.nodes = mem_noc_nodes, .nodes = mem_noc_nodes,
.num_nodes = ARRAY_SIZE(mem_noc_nodes), .num_nodes = ARRAY_SIZE(mem_noc_nodes),
.bcms = mem_noc_bcms, .bcms = mem_noc_bcms,
...@@ -384,7 +384,7 @@ static struct qcom_icc_node *mmss_noc_nodes[] = { ...@@ -384,7 +384,7 @@ static struct qcom_icc_node *mmss_noc_nodes[] = {
[SLAVE_CAMNOC_UNCOMP] = &qns_camnoc_uncomp, [SLAVE_CAMNOC_UNCOMP] = &qns_camnoc_uncomp,
}; };
const static struct qcom_icc_desc sdm845_mmss_noc = { static const struct qcom_icc_desc sdm845_mmss_noc = {
.nodes = mmss_noc_nodes, .nodes = mmss_noc_nodes,
.num_nodes = ARRAY_SIZE(mmss_noc_nodes), .num_nodes = ARRAY_SIZE(mmss_noc_nodes),
.bcms = mmss_noc_bcms, .bcms = mmss_noc_bcms,
...@@ -430,7 +430,7 @@ static struct qcom_icc_node *system_noc_nodes[] = { ...@@ -430,7 +430,7 @@ static struct qcom_icc_node *system_noc_nodes[] = {
[SLAVE_TCU] = &xs_sys_tcu_cfg, [SLAVE_TCU] = &xs_sys_tcu_cfg,
}; };
const static struct qcom_icc_desc sdm845_system_noc = { static const struct qcom_icc_desc sdm845_system_noc = {
.nodes = system_noc_nodes, .nodes = system_noc_nodes,
.num_nodes = ARRAY_SIZE(system_noc_nodes), .num_nodes = ARRAY_SIZE(system_noc_nodes),
.bcms = system_noc_bcms, .bcms = system_noc_bcms,
......
...@@ -1465,6 +1465,13 @@ static const struct mei_cfg mei_me_pch12_cfg = { ...@@ -1465,6 +1465,13 @@ static const struct mei_cfg mei_me_pch12_cfg = {
MEI_CFG_DMA_128, MEI_CFG_DMA_128,
}; };
/* LBG with quirk for SPS Firmware exclusion */
static const struct mei_cfg mei_me_pch12_sps_cfg = {
MEI_CFG_PCH8_HFS,
MEI_CFG_FW_VER_SUPP,
MEI_CFG_FW_SPS,
};
/* Tiger Lake and newer devices */ /* Tiger Lake and newer devices */
static const struct mei_cfg mei_me_pch15_cfg = { static const struct mei_cfg mei_me_pch15_cfg = {
MEI_CFG_PCH8_HFS, MEI_CFG_PCH8_HFS,
...@@ -1487,6 +1494,7 @@ static const struct mei_cfg *const mei_cfg_list[] = { ...@@ -1487,6 +1494,7 @@ static const struct mei_cfg *const mei_cfg_list[] = {
[MEI_ME_PCH8_CFG] = &mei_me_pch8_cfg, [MEI_ME_PCH8_CFG] = &mei_me_pch8_cfg,
[MEI_ME_PCH8_SPS_CFG] = &mei_me_pch8_sps_cfg, [MEI_ME_PCH8_SPS_CFG] = &mei_me_pch8_sps_cfg,
[MEI_ME_PCH12_CFG] = &mei_me_pch12_cfg, [MEI_ME_PCH12_CFG] = &mei_me_pch12_cfg,
[MEI_ME_PCH12_SPS_CFG] = &mei_me_pch12_sps_cfg,
[MEI_ME_PCH15_CFG] = &mei_me_pch15_cfg, [MEI_ME_PCH15_CFG] = &mei_me_pch15_cfg,
}; };
......
...@@ -80,6 +80,9 @@ struct mei_me_hw { ...@@ -80,6 +80,9 @@ struct mei_me_hw {
* servers platforms with quirk for * servers platforms with quirk for
* SPS firmware exclusion. * SPS firmware exclusion.
* @MEI_ME_PCH12_CFG: Platform Controller Hub Gen12 and newer * @MEI_ME_PCH12_CFG: Platform Controller Hub Gen12 and newer
* @MEI_ME_PCH12_SPS_CFG: Platform Controller Hub Gen12 and newer
* servers platforms with quirk for
* SPS firmware exclusion.
* @MEI_ME_PCH15_CFG: Platform Controller Hub Gen15 and newer * @MEI_ME_PCH15_CFG: Platform Controller Hub Gen15 and newer
* @MEI_ME_NUM_CFG: Upper Sentinel. * @MEI_ME_NUM_CFG: Upper Sentinel.
*/ */
...@@ -93,6 +96,7 @@ enum mei_cfg_idx { ...@@ -93,6 +96,7 @@ enum mei_cfg_idx {
MEI_ME_PCH8_CFG, MEI_ME_PCH8_CFG,
MEI_ME_PCH8_SPS_CFG, MEI_ME_PCH8_SPS_CFG,
MEI_ME_PCH12_CFG, MEI_ME_PCH12_CFG,
MEI_ME_PCH12_SPS_CFG,
MEI_ME_PCH15_CFG, MEI_ME_PCH15_CFG,
MEI_ME_NUM_CFG, MEI_ME_NUM_CFG,
}; };
......
...@@ -70,7 +70,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = { ...@@ -70,7 +70,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
{MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_SPS_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_BXT_M, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_BXT_M, MEI_ME_PCH8_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_APL_I, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_APL_I, MEI_ME_PCH8_CFG)},
......
...@@ -1483,7 +1483,7 @@ static void __exit most_exit(void) ...@@ -1483,7 +1483,7 @@ static void __exit most_exit(void)
ida_destroy(&mdev_id); ida_destroy(&mdev_id);
} }
module_init(most_init); subsys_initcall(most_init);
module_exit(most_exit); module_exit(most_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>"); MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>");
......
...@@ -815,6 +815,13 @@ static const struct of_device_id qusb2_phy_of_match_table[] = { ...@@ -815,6 +815,13 @@ static const struct of_device_id qusb2_phy_of_match_table[] = {
}, { }, {
.compatible = "qcom,msm8998-qusb2-phy", .compatible = "qcom,msm8998-qusb2-phy",
.data = &msm8998_phy_cfg, .data = &msm8998_phy_cfg,
}, {
/*
* Deprecated. Only here to support legacy device
* trees that didn't include "qcom,qusb2-v2-phy"
*/
.compatible = "qcom,sdm845-qusb2-phy",
.data = &qusb2_v2_phy_cfg,
}, { }, {
.compatible = "qcom,qusb2-v2-phy", .compatible = "qcom,qusb2-v2-phy",
.data = &qusb2_v2_phy_cfg, .data = &qusb2_v2_phy_cfg,
......
...@@ -160,18 +160,11 @@ static int qcom_snps_hsphy_power_on(struct phy *phy) ...@@ -160,18 +160,11 @@ static int qcom_snps_hsphy_power_on(struct phy *phy)
ret = regulator_bulk_enable(VREG_NUM, priv->vregs); ret = regulator_bulk_enable(VREG_NUM, priv->vregs);
if (ret) if (ret)
return ret; return ret;
ret = clk_bulk_prepare_enable(priv->num_clks, priv->clks);
if (ret)
goto err_disable_regulator;
qcom_snps_hsphy_disable_hv_interrupts(priv); qcom_snps_hsphy_disable_hv_interrupts(priv);
qcom_snps_hsphy_exit_retention(priv); qcom_snps_hsphy_exit_retention(priv);
return 0; return 0;
err_disable_regulator:
regulator_bulk_disable(VREG_NUM, priv->vregs);
return ret;
} }
static int qcom_snps_hsphy_power_off(struct phy *phy) static int qcom_snps_hsphy_power_off(struct phy *phy)
...@@ -180,7 +173,6 @@ static int qcom_snps_hsphy_power_off(struct phy *phy) ...@@ -180,7 +173,6 @@ static int qcom_snps_hsphy_power_off(struct phy *phy)
qcom_snps_hsphy_enter_retention(priv); qcom_snps_hsphy_enter_retention(priv);
qcom_snps_hsphy_enable_hv_interrupts(priv); qcom_snps_hsphy_enable_hv_interrupts(priv);
clk_bulk_disable_unprepare(priv->num_clks, priv->clks);
regulator_bulk_disable(VREG_NUM, priv->vregs); regulator_bulk_disable(VREG_NUM, priv->vregs);
return 0; return 0;
...@@ -266,21 +258,39 @@ static int qcom_snps_hsphy_init(struct phy *phy) ...@@ -266,21 +258,39 @@ static int qcom_snps_hsphy_init(struct phy *phy)
struct hsphy_priv *priv = phy_get_drvdata(phy); struct hsphy_priv *priv = phy_get_drvdata(phy);
int ret; int ret;
ret = qcom_snps_hsphy_reset(priv); ret = clk_bulk_prepare_enable(priv->num_clks, priv->clks);
if (ret) if (ret)
return ret; return ret;
ret = qcom_snps_hsphy_reset(priv);
if (ret)
goto disable_clocks;
qcom_snps_hsphy_init_sequence(priv); qcom_snps_hsphy_init_sequence(priv);
ret = qcom_snps_hsphy_por_reset(priv); ret = qcom_snps_hsphy_por_reset(priv);
if (ret) if (ret)
return ret; goto disable_clocks;
return 0;
disable_clocks:
clk_bulk_disable_unprepare(priv->num_clks, priv->clks);
return ret;
}
static int qcom_snps_hsphy_exit(struct phy *phy)
{
struct hsphy_priv *priv = phy_get_drvdata(phy);
clk_bulk_disable_unprepare(priv->num_clks, priv->clks);
return 0; return 0;
} }
static const struct phy_ops qcom_snps_hsphy_ops = { static const struct phy_ops qcom_snps_hsphy_ops = {
.init = qcom_snps_hsphy_init, .init = qcom_snps_hsphy_init,
.exit = qcom_snps_hsphy_exit,
.power_on = qcom_snps_hsphy_power_on, .power_on = qcom_snps_hsphy_power_on,
.power_off = qcom_snps_hsphy_power_off, .power_off = qcom_snps_hsphy_power_off,
.set_mode = qcom_snps_hsphy_set_mode, .set_mode = qcom_snps_hsphy_set_mode,
......
...@@ -53,9 +53,9 @@ enum mhi_callback { ...@@ -53,9 +53,9 @@ enum mhi_callback {
* @MHI_CHAIN: Linked transfer * @MHI_CHAIN: Linked transfer
*/ */
enum mhi_flags { enum mhi_flags {
MHI_EOB, MHI_EOB = BIT(0),
MHI_EOT, MHI_EOT = BIT(1),
MHI_CHAIN, MHI_CHAIN = BIT(2),
}; };
/** /**
...@@ -335,14 +335,15 @@ struct mhi_controller_config { ...@@ -335,14 +335,15 @@ struct mhi_controller_config {
* @syserr_worker: System error worker * @syserr_worker: System error worker
* @state_event: State change event * @state_event: State change event
* @status_cb: CB function to notify power states of the device (required) * @status_cb: CB function to notify power states of the device (required)
* @link_status: CB function to query link status of the device (required)
* @wake_get: CB function to assert device wake (optional) * @wake_get: CB function to assert device wake (optional)
* @wake_put: CB function to de-assert device wake (optional) * @wake_put: CB function to de-assert device wake (optional)
* @wake_toggle: CB function to assert and de-assert device wake (optional) * @wake_toggle: CB function to assert and de-assert device wake (optional)
* @runtime_get: CB function to controller runtime resume (required) * @runtime_get: CB function to controller runtime resume (required)
* @runtimet_put: CB function to decrement pm usage (required) * @runtime_put: CB function to decrement pm usage (required)
* @map_single: CB function to create TRE buffer * @map_single: CB function to create TRE buffer
* @unmap_single: CB function to destroy TRE buffer * @unmap_single: CB function to destroy TRE buffer
* @read_reg: Read a MHI register via the physical link (required)
* @write_reg: Write a MHI register via the physical link (required)
* @buffer_len: Bounce buffer length * @buffer_len: Bounce buffer length
* @bounce_buf: Use of bounce buffer * @bounce_buf: Use of bounce buffer
* @fbc_download: MHI host needs to do complete image transfer (optional) * @fbc_download: MHI host needs to do complete image transfer (optional)
...@@ -417,7 +418,6 @@ struct mhi_controller { ...@@ -417,7 +418,6 @@ struct mhi_controller {
void (*status_cb)(struct mhi_controller *mhi_cntrl, void (*status_cb)(struct mhi_controller *mhi_cntrl,
enum mhi_callback cb); enum mhi_callback cb);
int (*link_status)(struct mhi_controller *mhi_cntrl);
void (*wake_get)(struct mhi_controller *mhi_cntrl, bool override); void (*wake_get)(struct mhi_controller *mhi_cntrl, bool override);
void (*wake_put)(struct mhi_controller *mhi_cntrl, bool override); void (*wake_put)(struct mhi_controller *mhi_cntrl, bool override);
void (*wake_toggle)(struct mhi_controller *mhi_cntrl); void (*wake_toggle)(struct mhi_controller *mhi_cntrl);
...@@ -427,6 +427,10 @@ struct mhi_controller { ...@@ -427,6 +427,10 @@ struct mhi_controller {
struct mhi_buf_info *buf); struct mhi_buf_info *buf);
void (*unmap_single)(struct mhi_controller *mhi_cntrl, void (*unmap_single)(struct mhi_controller *mhi_cntrl,
struct mhi_buf_info *buf); struct mhi_buf_info *buf);
int (*read_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr,
u32 *out);
void (*write_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr,
u32 val);
size_t buffer_len; size_t buffer_len;
bool bounce_buf; bool bounce_buf;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment