• Home
  • Raw
  • Download

Lines Matching +full:jh7110 +full:- +full:mmc

1 // SPDX-License-Identifier: GPL-2.0
11 #include <linux/mmc/host.h>
18 #include "dw_mmc-pltfm.h"
36 if (ios->timing == MMC_TIMING_MMC_DDR52 || ios->timing == MMC_TIMING_UHS_DDR50) { in dw_mci_starfive_set_ios()
37 clock = (ios->clock > 50000000 && ios->clock <= 52000000) ? 100000000 : ios->clock; in dw_mci_starfive_set_ios()
38 ret = clk_set_rate(host->ciu_clk, clock); in dw_mci_starfive_set_ios()
40 dev_dbg(host->dev, "Use an external frequency divider %uHz\n", ios->clock); in dw_mci_starfive_set_ios()
41 host->bus_hz = clk_get_rate(host->ciu_clk); in dw_mci_starfive_set_ios()
43 dev_dbg(host->dev, "Using the internal divider\n"); in dw_mci_starfive_set_ios()
51 struct dw_mci *host = slot->host; in dw_mci_starfive_execute_tuning()
52 struct starfive_priv *priv = host->priv; in dw_mci_starfive_execute_tuning()
53 int rise_point = -1, fall_point = -1; in dw_mci_starfive_execute_tuning()
65 regval = i << priv->syscon_shift; in dw_mci_starfive_execute_tuning()
66 err = regmap_update_bits(priv->reg_syscon, priv->syscon_offset, in dw_mci_starfive_execute_tuning()
67 priv->syscon_mask, regval); in dw_mci_starfive_execute_tuning()
72 err = mmc_send_tuning(slot->mmc, opcode, NULL); in dw_mci_starfive_execute_tuning()
78 fall_point = i - 1; in dw_mci_starfive_execute_tuning()
83 if (rise_point != -1 && fall_point != -1) in dw_mci_starfive_execute_tuning()
92 if (rise_point == -1) in dw_mci_starfive_execute_tuning()
94 if (fall_point == -1) in dw_mci_starfive_execute_tuning()
95 fall_point = grade - 1; in dw_mci_starfive_execute_tuning()
98 (grade - 1)) in dw_mci_starfive_execute_tuning()
101 i = (rise_point + grade - 1) / 2; in dw_mci_starfive_execute_tuning()
106 regval = i << priv->syscon_shift; in dw_mci_starfive_execute_tuning()
107 err = regmap_update_bits(priv->reg_syscon, priv->syscon_offset, in dw_mci_starfive_execute_tuning()
108 priv->syscon_mask, regval); in dw_mci_starfive_execute_tuning()
113 dev_info(host->dev, "Found valid delay chain! use it [delay=%d]\n", i); in dw_mci_starfive_execute_tuning()
115 dev_err(host->dev, "No valid delay chain! use default\n"); in dw_mci_starfive_execute_tuning()
116 err = -EINVAL; in dw_mci_starfive_execute_tuning()
129 priv = devm_kzalloc(host->dev, sizeof(*priv), GFP_KERNEL); in dw_mci_starfive_parse_dt()
131 return -ENOMEM; in dw_mci_starfive_parse_dt()
133 ret = of_parse_phandle_with_fixed_args(host->dev->of_node, in dw_mci_starfive_parse_dt()
136 dev_err(host->dev, "Failed to parse starfive,sysreg\n"); in dw_mci_starfive_parse_dt()
137 return -EINVAL; in dw_mci_starfive_parse_dt()
140 priv->reg_syscon = syscon_node_to_regmap(args.np); in dw_mci_starfive_parse_dt()
142 if (IS_ERR(priv->reg_syscon)) in dw_mci_starfive_parse_dt()
143 return PTR_ERR(priv->reg_syscon); in dw_mci_starfive_parse_dt()
145 priv->syscon_offset = args.args[0]; in dw_mci_starfive_parse_dt()
146 priv->syscon_shift = args.args[1]; in dw_mci_starfive_parse_dt()
147 priv->syscon_mask = args.args[2]; in dw_mci_starfive_parse_dt()
149 host->priv = priv; in dw_mci_starfive_parse_dt()
162 { .compatible = "starfive,jh7110-mmc",
184 MODULE_DESCRIPTION("StarFive JH7110 Specific DW-MSHC Driver Extension");