Lines Matching refs:drvdata

84 #define stm_channel_addr(drvdata, ch)	(drvdata->chs.base +	\  argument
148 static void stm_hwevent_enable_hw(struct stm_drvdata *drvdata) in stm_hwevent_enable_hw() argument
150 CS_UNLOCK(drvdata->base); in stm_hwevent_enable_hw()
152 writel_relaxed(drvdata->stmhebsr, drvdata->base + STMHEBSR); in stm_hwevent_enable_hw()
153 writel_relaxed(drvdata->stmheter, drvdata->base + STMHETER); in stm_hwevent_enable_hw()
154 writel_relaxed(drvdata->stmheer, drvdata->base + STMHEER); in stm_hwevent_enable_hw()
157 drvdata->base + STMHEMCR); in stm_hwevent_enable_hw()
159 CS_LOCK(drvdata->base); in stm_hwevent_enable_hw()
162 static void stm_port_enable_hw(struct stm_drvdata *drvdata) in stm_port_enable_hw() argument
164 CS_UNLOCK(drvdata->base); in stm_port_enable_hw()
167 drvdata->base + STMSPTRIGCSR); in stm_port_enable_hw()
168 writel_relaxed(drvdata->stmspscr, drvdata->base + STMSPSCR); in stm_port_enable_hw()
169 writel_relaxed(drvdata->stmsper, drvdata->base + STMSPER); in stm_port_enable_hw()
171 CS_LOCK(drvdata->base); in stm_port_enable_hw()
174 static void stm_enable_hw(struct stm_drvdata *drvdata) in stm_enable_hw() argument
176 if (drvdata->stmheer) in stm_enable_hw()
177 stm_hwevent_enable_hw(drvdata); in stm_enable_hw()
179 stm_port_enable_hw(drvdata); in stm_enable_hw()
181 CS_UNLOCK(drvdata->base); in stm_enable_hw()
184 writel_relaxed(0xFFF, drvdata->base + STMSYNCR); in stm_enable_hw()
185 writel_relaxed((drvdata->traceid << 16 | /* trace id */ in stm_enable_hw()
188 drvdata->base + STMTCSR); in stm_enable_hw()
190 CS_LOCK(drvdata->base); in stm_enable_hw()
197 struct stm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in stm_enable() local
202 val = local_cmpxchg(&drvdata->mode, CS_MODE_DISABLED, mode); in stm_enable()
208 pm_runtime_get_sync(drvdata->dev); in stm_enable()
210 spin_lock(&drvdata->spinlock); in stm_enable()
211 stm_enable_hw(drvdata); in stm_enable()
212 spin_unlock(&drvdata->spinlock); in stm_enable()
214 dev_info(drvdata->dev, "STM tracing enabled\n"); in stm_enable()
218 static void stm_hwevent_disable_hw(struct stm_drvdata *drvdata) in stm_hwevent_disable_hw() argument
220 CS_UNLOCK(drvdata->base); in stm_hwevent_disable_hw()
222 writel_relaxed(0x0, drvdata->base + STMHEMCR); in stm_hwevent_disable_hw()
223 writel_relaxed(0x0, drvdata->base + STMHEER); in stm_hwevent_disable_hw()
224 writel_relaxed(0x0, drvdata->base + STMHETER); in stm_hwevent_disable_hw()
226 CS_LOCK(drvdata->base); in stm_hwevent_disable_hw()
229 static void stm_port_disable_hw(struct stm_drvdata *drvdata) in stm_port_disable_hw() argument
231 CS_UNLOCK(drvdata->base); in stm_port_disable_hw()
233 writel_relaxed(0x0, drvdata->base + STMSPER); in stm_port_disable_hw()
234 writel_relaxed(0x0, drvdata->base + STMSPTRIGCSR); in stm_port_disable_hw()
236 CS_LOCK(drvdata->base); in stm_port_disable_hw()
239 static void stm_disable_hw(struct stm_drvdata *drvdata) in stm_disable_hw() argument
243 CS_UNLOCK(drvdata->base); in stm_disable_hw()
245 val = readl_relaxed(drvdata->base + STMTCSR); in stm_disable_hw()
247 writel_relaxed(val, drvdata->base + STMTCSR); in stm_disable_hw()
249 CS_LOCK(drvdata->base); in stm_disable_hw()
251 stm_port_disable_hw(drvdata); in stm_disable_hw()
252 if (drvdata->stmheer) in stm_disable_hw()
253 stm_hwevent_disable_hw(drvdata); in stm_disable_hw()
259 struct stm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in stm_disable() local
266 if (local_read(&drvdata->mode) == CS_MODE_SYSFS) { in stm_disable()
267 spin_lock(&drvdata->spinlock); in stm_disable()
268 stm_disable_hw(drvdata); in stm_disable()
269 spin_unlock(&drvdata->spinlock); in stm_disable()
272 coresight_timeout(drvdata->base, STMTCSR, STMTCSR_BUSY_BIT, 0); in stm_disable()
274 pm_runtime_put(drvdata->dev); in stm_disable()
276 local_set(&drvdata->mode, CS_MODE_DISABLED); in stm_disable()
277 dev_info(drvdata->dev, "STM tracing disabled\n"); in stm_disable()
283 struct stm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in stm_trace_id() local
285 return drvdata->traceid; in stm_trace_id()
337 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_link() local
339 if (!drvdata || !drvdata->csdev) in stm_generic_link()
342 return coresight_enable(drvdata->csdev); in stm_generic_link()
348 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_unlink() local
350 if (!drvdata || !drvdata->csdev) in stm_generic_unlink()
353 coresight_disable(drvdata->csdev); in stm_generic_unlink()
360 struct stm_drvdata *drvdata = container_of(stm_data, in stm_mmio_addr() local
364 addr = drvdata->chs.phys + channel * BYTES_PER_CHANNEL; in stm_mmio_addr()
379 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_set_options() local
381 if (!(drvdata && local_read(&drvdata->mode))) in stm_generic_set_options()
384 if (channel >= drvdata->numsp) in stm_generic_set_options()
389 set_bit(channel, drvdata->chs.guaranteed); in stm_generic_set_options()
393 clear_bit(channel, drvdata->chs.guaranteed); in stm_generic_set_options()
412 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_packet() local
415 if (!(drvdata && local_read(&drvdata->mode))) in stm_generic_packet()
418 if (channel >= drvdata->numsp) in stm_generic_packet()
421 ch_addr = stm_channel_addr(drvdata, channel); in stm_generic_packet()
424 flags |= test_bit(channel, drvdata->chs.guaranteed) ? in stm_generic_packet()
427 if (size > drvdata->write_bytes) in stm_generic_packet()
428 size = drvdata->write_bytes; in stm_generic_packet()
441 stm_send(ch_addr, payload, 1, drvdata->write_bytes); in stm_generic_packet()
448 drvdata->write_bytes); in stm_generic_packet()
461 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_enable_show() local
462 unsigned long val = drvdata->stmheer; in hwevent_enable_show()
471 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_enable_store() local
479 drvdata->stmheer = val; in hwevent_enable_store()
481 drvdata->stmheter = val; in hwevent_enable_store()
490 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_select_show() local
491 unsigned long val = drvdata->stmhebsr; in hwevent_select_show()
500 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_select_store() local
508 drvdata->stmhebsr = val; in hwevent_select_store()
517 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_select_show() local
520 if (!local_read(&drvdata->mode)) { in port_select_show()
521 val = drvdata->stmspscr; in port_select_show()
523 spin_lock(&drvdata->spinlock); in port_select_show()
524 val = readl_relaxed(drvdata->base + STMSPSCR); in port_select_show()
525 spin_unlock(&drvdata->spinlock); in port_select_show()
535 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_select_store() local
543 spin_lock(&drvdata->spinlock); in port_select_store()
544 drvdata->stmspscr = val; in port_select_store()
546 if (local_read(&drvdata->mode)) { in port_select_store()
547 CS_UNLOCK(drvdata->base); in port_select_store()
549 stmsper = readl_relaxed(drvdata->base + STMSPER); in port_select_store()
550 writel_relaxed(0x0, drvdata->base + STMSPER); in port_select_store()
551 writel_relaxed(drvdata->stmspscr, drvdata->base + STMSPSCR); in port_select_store()
552 writel_relaxed(stmsper, drvdata->base + STMSPER); in port_select_store()
553 CS_LOCK(drvdata->base); in port_select_store()
555 spin_unlock(&drvdata->spinlock); in port_select_store()
564 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_enable_show() local
567 if (!local_read(&drvdata->mode)) { in port_enable_show()
568 val = drvdata->stmsper; in port_enable_show()
570 spin_lock(&drvdata->spinlock); in port_enable_show()
571 val = readl_relaxed(drvdata->base + STMSPER); in port_enable_show()
572 spin_unlock(&drvdata->spinlock); in port_enable_show()
582 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_enable_store() local
590 spin_lock(&drvdata->spinlock); in port_enable_store()
591 drvdata->stmsper = val; in port_enable_store()
593 if (local_read(&drvdata->mode)) { in port_enable_store()
594 CS_UNLOCK(drvdata->base); in port_enable_store()
595 writel_relaxed(drvdata->stmsper, drvdata->base + STMSPER); in port_enable_store()
596 CS_LOCK(drvdata->base); in port_enable_store()
598 spin_unlock(&drvdata->spinlock); in port_enable_store()
608 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in traceid_show() local
610 val = drvdata->traceid; in traceid_show()
620 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in traceid_store() local
627 drvdata->traceid = val & 0x7f; in traceid_store()
711 static u32 stm_fundamental_data_size(struct stm_drvdata *drvdata) in stm_fundamental_data_size() argument
718 stmspfeat2r = readl_relaxed(drvdata->base + STMSPFEAT2R); in stm_fundamental_data_size()
728 static u32 stm_num_stimulus_port(struct stm_drvdata *drvdata) in stm_num_stimulus_port() argument
732 numsp = readl_relaxed(drvdata->base + CORESIGHT_DEVID); in stm_num_stimulus_port()
743 static void stm_init_default_data(struct stm_drvdata *drvdata) in stm_init_default_data() argument
746 drvdata->stmspscr = 0x0; in stm_init_default_data()
752 drvdata->stmsper = ~0x0; in stm_init_default_data()
760 drvdata->traceid = 0x1; in stm_init_default_data()
763 bitmap_clear(drvdata->chs.guaranteed, 0, drvdata->numsp); in stm_init_default_data()
766 static void stm_init_generic_data(struct stm_drvdata *drvdata) in stm_init_generic_data() argument
768 drvdata->stm.name = dev_name(drvdata->dev); in stm_init_generic_data()
774 drvdata->stm.sw_start = 1; in stm_init_generic_data()
775 drvdata->stm.sw_end = 1; in stm_init_generic_data()
776 drvdata->stm.hw_override = true; in stm_init_generic_data()
777 drvdata->stm.sw_nchannels = drvdata->numsp; in stm_init_generic_data()
778 drvdata->stm.sw_mmiosz = BYTES_PER_CHANNEL; in stm_init_generic_data()
779 drvdata->stm.packet = stm_generic_packet; in stm_init_generic_data()
780 drvdata->stm.mmio_addr = stm_mmio_addr; in stm_init_generic_data()
781 drvdata->stm.link = stm_generic_link; in stm_init_generic_data()
782 drvdata->stm.unlink = stm_generic_unlink; in stm_init_generic_data()
783 drvdata->stm.set_options = stm_generic_set_options; in stm_init_generic_data()
793 struct stm_drvdata *drvdata; in stm_probe() local
806 drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); in stm_probe()
807 if (!drvdata) in stm_probe()
810 drvdata->dev = &adev->dev; in stm_probe()
811 drvdata->atclk = devm_clk_get(&adev->dev, "atclk"); /* optional */ in stm_probe()
812 if (!IS_ERR(drvdata->atclk)) { in stm_probe()
813 ret = clk_prepare_enable(drvdata->atclk); in stm_probe()
817 dev_set_drvdata(dev, drvdata); in stm_probe()
822 drvdata->base = base; in stm_probe()
827 drvdata->chs.phys = ch_res.start; in stm_probe()
832 drvdata->chs.base = base; in stm_probe()
834 drvdata->write_bytes = stm_fundamental_data_size(drvdata); in stm_probe()
837 drvdata->numsp = boot_nr_channel; in stm_probe()
841 drvdata->numsp = stm_num_stimulus_port(drvdata); in stm_probe()
842 res_size = min((resource_size_t)(drvdata->numsp * in stm_probe()
845 bitmap_size = BITS_TO_LONGS(drvdata->numsp) * sizeof(long); in stm_probe()
850 drvdata->chs.guaranteed = guaranteed; in stm_probe()
852 spin_lock_init(&drvdata->spinlock); in stm_probe()
854 stm_init_default_data(drvdata); in stm_probe()
855 stm_init_generic_data(drvdata); in stm_probe()
857 if (stm_register_device(dev, &drvdata->stm, THIS_MODULE)) { in stm_probe()
869 drvdata->csdev = coresight_register(&desc); in stm_probe()
870 if (IS_ERR(drvdata->csdev)) { in stm_probe()
871 ret = PTR_ERR(drvdata->csdev); in stm_probe()
881 stm_unregister_device(&drvdata->stm); in stm_probe()
888 struct stm_drvdata *drvdata = dev_get_drvdata(dev); in stm_runtime_suspend() local
890 if (drvdata && !IS_ERR(drvdata->atclk)) in stm_runtime_suspend()
891 clk_disable_unprepare(drvdata->atclk); in stm_runtime_suspend()
898 struct stm_drvdata *drvdata = dev_get_drvdata(dev); in stm_runtime_resume() local
900 if (drvdata && !IS_ERR(drvdata->atclk)) in stm_runtime_resume()
901 clk_prepare_enable(drvdata->atclk); in stm_runtime_resume()