Lines Matching defs:ptp_dte
41 struct ptp_dte {
87 static void dte_write_nco_delta(struct ptp_dte *ptp_dte, s64 delta)
91 ns = dte_read_nco(ptp_dte->regs);
95 if (ptp_dte->ts_wrap_cnt) {
97 ptp_dte->ts_wrap_cnt--;
104 ptp_dte->ts_wrap_cnt++;
109 dte_write_nco(ptp_dte->regs, ns);
111 ptp_dte->ts_ovf_last = (ns >> DTE_NCO_TS_WRAP_LSHIFT) &
115 static s64 dte_read_nco_with_ovf(struct ptp_dte *ptp_dte)
120 ns = dte_read_nco(ptp_dte->regs);
126 if (ts_ovf < ptp_dte->ts_ovf_last)
127 ptp_dte->ts_wrap_cnt++;
129 ptp_dte->ts_ovf_last = ts_ovf;
132 ns += (s64)(BIT_ULL(DTE_WRAP_AROUND_NSEC_SHIFT) * ptp_dte->ts_wrap_cnt);
142 struct ptp_dte *ptp_dte = container_of(ptp, struct ptp_dte, caps);
144 if (abs(ppb) > ptp_dte->caps.max_adj) {
145 dev_err(ptp_dte->dev, "ppb adj too big\n");
154 spin_lock_irqsave(&ptp_dte->lock, flags);
155 writel(nco_incr, ptp_dte->regs + DTE_NCO_INC_REG);
156 spin_unlock_irqrestore(&ptp_dte->lock, flags);
164 struct ptp_dte *ptp_dte = container_of(ptp, struct ptp_dte, caps);
166 spin_lock_irqsave(&ptp_dte->lock, flags);
167 dte_write_nco_delta(ptp_dte, delta);
168 spin_unlock_irqrestore(&ptp_dte->lock, flags);
176 struct ptp_dte *ptp_dte = container_of(ptp, struct ptp_dte, caps);
178 spin_lock_irqsave(&ptp_dte->lock, flags);
179 *ts = ns_to_timespec64(dte_read_nco_with_ovf(ptp_dte));
180 spin_unlock_irqrestore(&ptp_dte->lock, flags);
189 struct ptp_dte *ptp_dte = container_of(ptp, struct ptp_dte, caps);
191 spin_lock_irqsave(&ptp_dte->lock, flags);
194 writel(0, ptp_dte->regs + DTE_NCO_INC_REG);
196 dte_write_nco(ptp_dte->regs, timespec64_to_ns(ts));
199 ptp_dte->ts_ovf_last = 0;
200 ptp_dte->ts_wrap_cnt = 0;
203 writel(DTE_NCO_INC_DEFAULT, ptp_dte->regs + DTE_NCO_INC_REG);
205 spin_unlock_irqrestore(&ptp_dte->lock, flags);
232 struct ptp_dte *ptp_dte;
235 ptp_dte = devm_kzalloc(dev, sizeof(struct ptp_dte), GFP_KERNEL);
236 if (!ptp_dte)
239 ptp_dte->regs = devm_platform_ioremap_resource(pdev, 0);
240 if (IS_ERR(ptp_dte->regs))
241 return PTR_ERR(ptp_dte->regs);
243 spin_lock_init(&ptp_dte->lock);
245 ptp_dte->dev = dev;
246 ptp_dte->caps = ptp_dte_caps;
247 ptp_dte->ptp_clk = ptp_clock_register(&ptp_dte->caps, &pdev->dev);
248 if (IS_ERR(ptp_dte->ptp_clk)) {
251 return PTR_ERR(ptp_dte->ptp_clk);
254 platform_set_drvdata(pdev, ptp_dte);
263 struct ptp_dte *ptp_dte = platform_get_drvdata(pdev);
266 ptp_clock_unregister(ptp_dte->ptp_clk);
269 writel(0, ptp_dte->regs + (i * sizeof(u32)));
275 struct ptp_dte *ptp_dte = dev_get_drvdata(dev);
279 ptp_dte->reg_val[i] =
280 readl(ptp_dte->regs + (i * sizeof(u32)));
284 writel(0, ptp_dte->regs + DTE_NCO_INC_REG);
291 struct ptp_dte *ptp_dte = dev_get_drvdata(dev);
296 writel(ptp_dte->reg_val[i],
297 (ptp_dte->regs + (i * sizeof(u32))));
299 writel(((ptp_dte->reg_val[i] &
301 (ptp_dte->regs + (i * sizeof(u32))));