• Home
  • Raw
  • Download

Lines Matching +full:efuse +full:- +full:size

2  * Rockchip eFuse Driver
5 * Author: Caesar Wang <wxt@rock-chips.com>
22 #include <linux/nvmem-provider.h>
66 struct rockchip_efuse_chip *efuse = context; in rockchip_rk3288_efuse_read() local
70 ret = clk_prepare_enable(efuse->clk); in rockchip_rk3288_efuse_read()
72 dev_err(efuse->dev, "failed to prepare/enable efuse clk\n"); in rockchip_rk3288_efuse_read()
76 writel(RK3288_LOAD | RK3288_PGENB, efuse->base + REG_EFUSE_CTRL); in rockchip_rk3288_efuse_read()
78 while (bytes--) { in rockchip_rk3288_efuse_read()
79 writel(readl(efuse->base + REG_EFUSE_CTRL) & in rockchip_rk3288_efuse_read()
81 efuse->base + REG_EFUSE_CTRL); in rockchip_rk3288_efuse_read()
82 writel(readl(efuse->base + REG_EFUSE_CTRL) | in rockchip_rk3288_efuse_read()
84 efuse->base + REG_EFUSE_CTRL); in rockchip_rk3288_efuse_read()
86 writel(readl(efuse->base + REG_EFUSE_CTRL) | in rockchip_rk3288_efuse_read()
87 RK3288_STROBE, efuse->base + REG_EFUSE_CTRL); in rockchip_rk3288_efuse_read()
89 *buf++ = readb(efuse->base + REG_EFUSE_DOUT); in rockchip_rk3288_efuse_read()
90 writel(readl(efuse->base + REG_EFUSE_CTRL) & in rockchip_rk3288_efuse_read()
91 (~RK3288_STROBE), efuse->base + REG_EFUSE_CTRL); in rockchip_rk3288_efuse_read()
96 writel(RK3288_PGENB | RK3288_CSB, efuse->base + REG_EFUSE_CTRL); in rockchip_rk3288_efuse_read()
98 clk_disable_unprepare(efuse->clk); in rockchip_rk3288_efuse_read()
106 struct rockchip_efuse_chip *efuse = context; in rockchip_rk3328_efuse_read() local
112 ret = clk_prepare_enable(efuse->clk); in rockchip_rk3328_efuse_read()
114 dev_err(efuse->dev, "failed to prepare/enable efuse clk\n"); in rockchip_rk3328_efuse_read()
118 /* 128 Byte efuse, 96 Byte for secure, 32 Byte for non-secure */ in rockchip_rk3328_efuse_read()
123 addr_len = addr_end - addr_start; in rockchip_rk3328_efuse_read()
128 ret = -ENOMEM; in rockchip_rk3328_efuse_read()
132 while (addr_len--) { in rockchip_rk3328_efuse_read()
135 efuse->base + RK3328_AUTO_CTRL); in rockchip_rk3328_efuse_read()
137 status = readl(efuse->base + RK3328_INT_STATUS); in rockchip_rk3328_efuse_read()
139 ret = -EIO; in rockchip_rk3328_efuse_read()
142 out_value = readl(efuse->base + RK3328_DOUT); in rockchip_rk3328_efuse_read()
143 writel(RK3328_INT_FINISH, efuse->base + RK3328_INT_STATUS); in rockchip_rk3328_efuse_read()
153 clk_disable_unprepare(efuse->clk); in rockchip_rk3328_efuse_read()
161 struct rockchip_efuse_chip *efuse = context; in rockchip_rk3399_efuse_read() local
167 ret = clk_prepare_enable(efuse->clk); in rockchip_rk3399_efuse_read()
169 dev_err(efuse->dev, "failed to prepare/enable efuse clk\n"); in rockchip_rk3399_efuse_read()
176 addr_len = addr_end - addr_start; in rockchip_rk3399_efuse_read()
181 clk_disable_unprepare(efuse->clk); in rockchip_rk3399_efuse_read()
182 return -ENOMEM; in rockchip_rk3399_efuse_read()
186 efuse->base + REG_EFUSE_CTRL); in rockchip_rk3399_efuse_read()
188 while (addr_len--) { in rockchip_rk3399_efuse_read()
189 writel(readl(efuse->base + REG_EFUSE_CTRL) | RK3399_STROBE | in rockchip_rk3399_efuse_read()
191 efuse->base + REG_EFUSE_CTRL); in rockchip_rk3399_efuse_read()
193 out_value = readl(efuse->base + REG_EFUSE_DOUT); in rockchip_rk3399_efuse_read()
194 writel(readl(efuse->base + REG_EFUSE_CTRL) & (~RK3399_STROBE), in rockchip_rk3399_efuse_read()
195 efuse->base + REG_EFUSE_CTRL); in rockchip_rk3399_efuse_read()
203 writel(RK3399_PD | RK3399_CSB, efuse->base + REG_EFUSE_CTRL); in rockchip_rk3399_efuse_read()
209 clk_disable_unprepare(efuse->clk); in rockchip_rk3399_efuse_read()
215 .name = "rockchip-efuse",
224 .compatible = "rockchip,rockchip-efuse",
228 .compatible = "rockchip,rk3066a-efuse",
232 .compatible = "rockchip,rk3188-efuse",
236 .compatible = "rockchip,rk3228-efuse",
240 .compatible = "rockchip,rk3288-efuse",
244 .compatible = "rockchip,rk3368-efuse",
248 .compatible = "rockchip,rk3328-efuse",
252 .compatible = "rockchip,rk3399-efuse",
263 struct rockchip_efuse_chip *efuse; in rockchip_efuse_probe() local
265 struct device *dev = &pdev->dev; in rockchip_efuse_probe()
270 return -EINVAL; in rockchip_efuse_probe()
273 efuse = devm_kzalloc(dev, sizeof(struct rockchip_efuse_chip), in rockchip_efuse_probe()
275 if (!efuse) in rockchip_efuse_probe()
276 return -ENOMEM; in rockchip_efuse_probe()
279 efuse->base = devm_ioremap_resource(dev, res); in rockchip_efuse_probe()
280 if (IS_ERR(efuse->base)) in rockchip_efuse_probe()
281 return PTR_ERR(efuse->base); in rockchip_efuse_probe()
283 efuse->clk = devm_clk_get(dev, "pclk_efuse"); in rockchip_efuse_probe()
284 if (IS_ERR(efuse->clk)) in rockchip_efuse_probe()
285 return PTR_ERR(efuse->clk); in rockchip_efuse_probe()
287 efuse->dev = dev; in rockchip_efuse_probe()
288 if (of_property_read_u32(dev->of_node, "rockchip,efuse-size", in rockchip_efuse_probe()
289 &econfig.size)) in rockchip_efuse_probe()
290 econfig.size = resource_size(res); in rockchip_efuse_probe()
292 econfig.priv = efuse; in rockchip_efuse_probe()
293 econfig.dev = efuse->dev; in rockchip_efuse_probe()
302 .name = "rockchip-efuse",