Lines Matching defs:axi
60 struct bt1_axi *axi = data;
63 regmap_read(axi->sys_regs, BT1_AXI_WERRL, &low);
64 regmap_read(axi->sys_regs, BT1_AXI_WERRH, &high);
66 dev_crit_ratelimited(axi->dev,
68 atomic_inc_return(&axi->count),
86 struct bt1_axi *axi = data;
87 struct platform_device *pdev = to_platform_device(axi->dev);
95 struct bt1_axi *axi;
98 axi = devm_kzalloc(dev, sizeof(*axi), GFP_KERNEL);
99 if (!axi)
102 ret = devm_add_action(dev, bt1_axi_clear_data, axi);
108 axi->dev = dev;
109 atomic_set(&axi->count, 0);
110 platform_set_drvdata(pdev, axi);
112 return axi;
115 static int bt1_axi_request_regs(struct bt1_axi *axi)
117 struct platform_device *pdev = to_platform_device(axi->dev);
118 struct device *dev = axi->dev;
120 axi->sys_regs = syscon_regmap_lookup_by_phandle(dev->of_node, "syscon");
121 if (IS_ERR(axi->sys_regs)) {
123 return PTR_ERR(axi->sys_regs);
126 axi->qos_regs = devm_platform_ioremap_resource_byname(pdev, "qos");
127 if (IS_ERR(axi->qos_regs))
130 return PTR_ERR_OR_ZERO(axi->qos_regs);
133 static int bt1_axi_request_rst(struct bt1_axi *axi)
137 axi->arst = devm_reset_control_get_optional_exclusive(axi->dev, "arst");
138 if (IS_ERR(axi->arst)) {
139 dev_warn(axi->dev, "Couldn't get reset control line\n");
140 return PTR_ERR(axi->arst);
143 ret = reset_control_deassert(axi->arst);
145 dev_err(axi->dev, "Failed to deassert the reset line\n");
152 struct bt1_axi *axi = data;
154 clk_disable_unprepare(axi->aclk);
157 static int bt1_axi_request_clk(struct bt1_axi *axi)
161 axi->aclk = devm_clk_get(axi->dev, "aclk");
162 if (IS_ERR(axi->aclk)) {
163 dev_err(axi->dev, "Couldn't get AXI Interconnect clock\n");
164 return PTR_ERR(axi->aclk);
167 ret = clk_prepare_enable(axi->aclk);
169 dev_err(axi->dev, "Couldn't enable the AXI clock\n");
173 ret = devm_add_action_or_reset(axi->dev, bt1_axi_disable_clk, axi);
175 dev_err(axi->dev, "Can't add AXI clock disable action\n");
180 static int bt1_axi_request_irq(struct bt1_axi *axi)
182 struct platform_device *pdev = to_platform_device(axi->dev);
185 axi->irq = platform_get_irq(pdev, 0);
186 if (axi->irq < 0)
187 return axi->irq;
189 ret = devm_request_irq(axi->dev, axi->irq, bt1_axi_isr, IRQF_SHARED,
190 "bt1-axi", axi);
192 dev_err(axi->dev, "Couldn't request AXI EHB IRQ\n");
200 struct bt1_axi *axi = dev_get_drvdata(dev);
202 return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&axi->count));
216 struct bt1_axi *axi = dev_get_drvdata(dev);
224 readb(axi->qos_regs);
226 writeb(0, axi->qos_regs);
243 struct bt1_axi *axi = data;
245 device_remove_groups(axi->dev, bt1_axi_sysfs_groups);
248 static int bt1_axi_init_sysfs(struct bt1_axi *axi)
252 ret = device_add_groups(axi->dev, bt1_axi_sysfs_groups);
254 dev_err(axi->dev, "Failed to add sysfs files group\n");
258 ret = devm_add_action_or_reset(axi->dev, bt1_axi_remove_sysfs, axi);
260 dev_err(axi->dev, "Can't add AXI EHB sysfs remove action\n");
267 struct bt1_axi *axi;
270 axi = bt1_axi_create_data(pdev);
271 if (IS_ERR(axi))
272 return PTR_ERR(axi);
274 ret = bt1_axi_request_regs(axi);
278 ret = bt1_axi_request_rst(axi);
282 ret = bt1_axi_request_clk(axi);
286 ret = bt1_axi_request_irq(axi);
290 ret = bt1_axi_init_sysfs(axi);
298 { .compatible = "baikal,bt1-axi" },
306 .name = "bt1-axi",