Lines Matching refs:dw

20 #define DW_XDATA_DRIVER_NAME		"dw-xdata-pcie"
73 static inline struct dw_xdata_regs __iomem *__dw_regs(struct dw_xdata *dw)
75 return dw->rg_region.vaddr;
78 static void dw_xdata_stop(struct dw_xdata *dw)
82 mutex_lock(&dw->mutex);
84 burst = readl(&(__dw_regs(dw)->burst_cnt));
88 writel(burst, &(__dw_regs(dw)->burst_cnt));
91 mutex_unlock(&dw->mutex);
94 static void dw_xdata_start(struct dw_xdata *dw, bool write)
96 struct device *dev = &dw->pdev->dev;
100 dw_xdata_stop(dw);
102 mutex_lock(&dw->mutex);
105 writel(0x0, &(__dw_regs(dw)->status));
108 writel(BURST_REPEAT | BURST_VALUE, &(__dw_regs(dw)->burst_cnt));
111 writel(PATTERN_VALUE, &(__dw_regs(dw)->pattern));
117 control |= CONTROL_LENGTH(dw->max_wr_len);
119 control |= CONTROL_LENGTH(dw->max_rd_len);
121 writel(control, &(__dw_regs(dw)->control));
129 status = readl(&(__dw_regs(dw)->status));
131 mutex_unlock(&dw->mutex);
138 static void dw_xdata_perf_meas(struct dw_xdata *dw, u64 *data, bool write)
141 *data = readl(&(__dw_regs(dw)->wr_cnt_msb));
143 *data |= readl(&(__dw_regs(dw)->wr_cnt_lsb));
145 *data = readl(&(__dw_regs(dw)->rd_cnt_msb));
147 *data |= readl(&(__dw_regs(dw)->rd_cnt_lsb));
162 static void dw_xdata_perf(struct dw_xdata *dw, u64 *rate, bool write)
164 struct device *dev = &dw->pdev->dev;
167 mutex_lock(&dw->mutex);
170 writel(0x0, &(__dw_regs(dw)->perf_control));
171 dw_xdata_perf_meas(dw, &data[0], write);
173 writel((u32)XPERF_CONTROL_ENABLE, &(__dw_regs(dw)->perf_control));
182 writel(0x0, &(__dw_regs(dw)->perf_control));
183 dw_xdata_perf_meas(dw, &data[1], write);
185 writel((u32)XPERF_CONTROL_ENABLE, &(__dw_regs(dw)->perf_control));
195 mutex_unlock(&dw->mutex);
210 struct dw_xdata *dw = misc_dev_to_dw(misc_dev);
213 dw_xdata_perf(dw, &rate, true);
222 struct dw_xdata *dw = misc_dev_to_dw(misc_dev);
232 dw_xdata_start(dw, true);
235 dw_xdata_stop(dw);
247 struct dw_xdata *dw = misc_dev_to_dw(misc_dev);
250 dw_xdata_perf(dw, &rate, false);
259 struct dw_xdata *dw = misc_dev_to_dw(misc_dev);
269 dw_xdata_start(dw, false);
272 dw_xdata_stop(dw);
292 struct dw_xdata *dw;
315 dw = devm_kzalloc(dev, sizeof(*dw), GFP_KERNEL);
316 if (!dw)
320 mutex_init(&dw->mutex);
322 dw->rg_region.vaddr = pcim_iomap_table(pdev)[BAR_0];
323 if (!dw->rg_region.vaddr)
326 dw->rg_region.paddr = pdev->resource[BAR_0].start;
328 dw->max_wr_len = pcie_get_mps(pdev);
329 dw->max_wr_len >>= 2;
331 dw->max_rd_len = pcie_get_readrq(pdev);
332 dw->max_rd_len >>= 2;
334 dw->pdev = pdev;
343 dw->misc_dev.name = kstrdup(name, GFP_KERNEL);
344 if (!dw->misc_dev.name) {
349 dw->misc_dev.minor = MISC_DYNAMIC_MINOR;
350 dw->misc_dev.parent = dev;
351 dw->misc_dev.groups = xdata_groups;
353 writel(0x0, &(__dw_regs(dw)->RAM_addr));
354 writel(0x0, &(__dw_regs(dw)->RAM_port));
356 addr = dw->rg_region.paddr + DW_XDATA_EP_MEM_OFFSET;
357 writel(lower_32_bits(addr), &(__dw_regs(dw)->addr_lsb));
358 writel(upper_32_bits(addr), &(__dw_regs(dw)->addr_msb));
362 dw->max_wr_len * 4, dw->max_rd_len * 4);
365 pci_set_drvdata(pdev, dw);
368 err = misc_register(&dw->misc_dev);
377 kfree(dw->misc_dev.name);
387 struct dw_xdata *dw = pci_get_drvdata(pdev);
390 if (sscanf(dw->misc_dev.name, DW_XDATA_DRIVER_NAME ".%d", &id) != 1)
396 dw_xdata_stop(dw);
397 misc_deregister(&dw->misc_dev);
398 kfree(dw->misc_dev.name);