Lines Matching refs:drvdata

85 #define stm_channel_addr(drvdata, ch)	(drvdata->chs.base +	\  argument
149 static void stm_hwevent_enable_hw(struct stm_drvdata *drvdata) in stm_hwevent_enable_hw() argument
151 CS_UNLOCK(drvdata->base); in stm_hwevent_enable_hw()
153 writel_relaxed(drvdata->stmhebsr, drvdata->base + STMHEBSR); in stm_hwevent_enable_hw()
154 writel_relaxed(drvdata->stmheter, drvdata->base + STMHETER); in stm_hwevent_enable_hw()
155 writel_relaxed(drvdata->stmheer, drvdata->base + STMHEER); in stm_hwevent_enable_hw()
158 drvdata->base + STMHEMCR); in stm_hwevent_enable_hw()
160 CS_LOCK(drvdata->base); in stm_hwevent_enable_hw()
163 static void stm_port_enable_hw(struct stm_drvdata *drvdata) in stm_port_enable_hw() argument
165 CS_UNLOCK(drvdata->base); in stm_port_enable_hw()
168 drvdata->base + STMSPTRIGCSR); in stm_port_enable_hw()
169 writel_relaxed(drvdata->stmspscr, drvdata->base + STMSPSCR); in stm_port_enable_hw()
170 writel_relaxed(drvdata->stmsper, drvdata->base + STMSPER); in stm_port_enable_hw()
172 CS_LOCK(drvdata->base); in stm_port_enable_hw()
175 static void stm_enable_hw(struct stm_drvdata *drvdata) in stm_enable_hw() argument
177 if (drvdata->stmheer) in stm_enable_hw()
178 stm_hwevent_enable_hw(drvdata); in stm_enable_hw()
180 stm_port_enable_hw(drvdata); in stm_enable_hw()
182 CS_UNLOCK(drvdata->base); in stm_enable_hw()
185 writel_relaxed(0xFFF, drvdata->base + STMSYNCR); in stm_enable_hw()
186 writel_relaxed((drvdata->traceid << 16 | /* trace id */ in stm_enable_hw()
189 drvdata->base + STMTCSR); in stm_enable_hw()
191 CS_LOCK(drvdata->base); in stm_enable_hw()
198 struct stm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in stm_enable() local
203 val = local_cmpxchg(&drvdata->mode, CS_MODE_DISABLED, mode); in stm_enable()
211 spin_lock(&drvdata->spinlock); in stm_enable()
212 stm_enable_hw(drvdata); in stm_enable()
213 spin_unlock(&drvdata->spinlock); in stm_enable()
219 static void stm_hwevent_disable_hw(struct stm_drvdata *drvdata) in stm_hwevent_disable_hw() argument
221 CS_UNLOCK(drvdata->base); in stm_hwevent_disable_hw()
223 writel_relaxed(0x0, drvdata->base + STMHEMCR); in stm_hwevent_disable_hw()
224 writel_relaxed(0x0, drvdata->base + STMHEER); in stm_hwevent_disable_hw()
225 writel_relaxed(0x0, drvdata->base + STMHETER); in stm_hwevent_disable_hw()
227 CS_LOCK(drvdata->base); in stm_hwevent_disable_hw()
230 static void stm_port_disable_hw(struct stm_drvdata *drvdata) in stm_port_disable_hw() argument
232 CS_UNLOCK(drvdata->base); in stm_port_disable_hw()
234 writel_relaxed(0x0, drvdata->base + STMSPER); in stm_port_disable_hw()
235 writel_relaxed(0x0, drvdata->base + STMSPTRIGCSR); in stm_port_disable_hw()
237 CS_LOCK(drvdata->base); in stm_port_disable_hw()
240 static void stm_disable_hw(struct stm_drvdata *drvdata) in stm_disable_hw() argument
244 CS_UNLOCK(drvdata->base); in stm_disable_hw()
246 val = readl_relaxed(drvdata->base + STMTCSR); in stm_disable_hw()
248 writel_relaxed(val, drvdata->base + STMTCSR); in stm_disable_hw()
250 CS_LOCK(drvdata->base); in stm_disable_hw()
252 stm_port_disable_hw(drvdata); in stm_disable_hw()
253 if (drvdata->stmheer) in stm_disable_hw()
254 stm_hwevent_disable_hw(drvdata); in stm_disable_hw()
260 struct stm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in stm_disable() local
268 if (local_read(&drvdata->mode) == CS_MODE_SYSFS) { in stm_disable()
269 spin_lock(&drvdata->spinlock); in stm_disable()
270 stm_disable_hw(drvdata); in stm_disable()
271 spin_unlock(&drvdata->spinlock); in stm_disable()
278 local_set(&drvdata->mode, CS_MODE_DISABLED); in stm_disable()
285 struct stm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in stm_trace_id() local
287 return drvdata->traceid; in stm_trace_id()
339 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_link() local
341 if (!drvdata || !drvdata->csdev) in stm_generic_link()
344 return coresight_enable(drvdata->csdev); in stm_generic_link()
350 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_unlink() local
352 if (!drvdata || !drvdata->csdev) in stm_generic_unlink()
355 coresight_disable(drvdata->csdev); in stm_generic_unlink()
362 struct stm_drvdata *drvdata = container_of(stm_data, in stm_mmio_addr() local
366 addr = drvdata->chs.phys + channel * BYTES_PER_CHANNEL; in stm_mmio_addr()
381 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_set_options() local
383 if (!(drvdata && local_read(&drvdata->mode))) in stm_generic_set_options()
386 if (channel >= drvdata->numsp) in stm_generic_set_options()
391 set_bit(channel, drvdata->chs.guaranteed); in stm_generic_set_options()
395 clear_bit(channel, drvdata->chs.guaranteed); in stm_generic_set_options()
414 struct stm_drvdata *drvdata = container_of(stm_data, in stm_generic_packet() local
418 if (!(drvdata && local_read(&drvdata->mode))) in stm_generic_packet()
421 if (channel >= drvdata->numsp) in stm_generic_packet()
424 ch_addr = stm_channel_addr(drvdata, channel); in stm_generic_packet()
428 stm_flags |= test_bit(channel, drvdata->chs.guaranteed) ? in stm_generic_packet()
431 if (size > drvdata->write_bytes) in stm_generic_packet()
432 size = drvdata->write_bytes; in stm_generic_packet()
445 stm_send(ch_addr, payload, 1, drvdata->write_bytes); in stm_generic_packet()
453 drvdata->write_bytes); in stm_generic_packet()
466 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_enable_show() local
467 unsigned long val = drvdata->stmheer; in hwevent_enable_show()
476 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_enable_store() local
484 drvdata->stmheer = val; in hwevent_enable_store()
486 drvdata->stmheter = val; in hwevent_enable_store()
495 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_select_show() local
496 unsigned long val = drvdata->stmhebsr; in hwevent_select_show()
505 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in hwevent_select_store() local
513 drvdata->stmhebsr = val; in hwevent_select_store()
522 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_select_show() local
525 if (!local_read(&drvdata->mode)) { in port_select_show()
526 val = drvdata->stmspscr; in port_select_show()
528 spin_lock(&drvdata->spinlock); in port_select_show()
529 val = readl_relaxed(drvdata->base + STMSPSCR); in port_select_show()
530 spin_unlock(&drvdata->spinlock); in port_select_show()
540 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_select_store() local
548 spin_lock(&drvdata->spinlock); in port_select_store()
549 drvdata->stmspscr = val; in port_select_store()
551 if (local_read(&drvdata->mode)) { in port_select_store()
552 CS_UNLOCK(drvdata->base); in port_select_store()
554 stmsper = readl_relaxed(drvdata->base + STMSPER); in port_select_store()
555 writel_relaxed(0x0, drvdata->base + STMSPER); in port_select_store()
556 writel_relaxed(drvdata->stmspscr, drvdata->base + STMSPSCR); in port_select_store()
557 writel_relaxed(stmsper, drvdata->base + STMSPER); in port_select_store()
558 CS_LOCK(drvdata->base); in port_select_store()
560 spin_unlock(&drvdata->spinlock); in port_select_store()
569 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_enable_show() local
572 if (!local_read(&drvdata->mode)) { in port_enable_show()
573 val = drvdata->stmsper; in port_enable_show()
575 spin_lock(&drvdata->spinlock); in port_enable_show()
576 val = readl_relaxed(drvdata->base + STMSPER); in port_enable_show()
577 spin_unlock(&drvdata->spinlock); in port_enable_show()
587 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in port_enable_store() local
595 spin_lock(&drvdata->spinlock); in port_enable_store()
596 drvdata->stmsper = val; in port_enable_store()
598 if (local_read(&drvdata->mode)) { in port_enable_store()
599 CS_UNLOCK(drvdata->base); in port_enable_store()
600 writel_relaxed(drvdata->stmsper, drvdata->base + STMSPER); in port_enable_store()
601 CS_LOCK(drvdata->base); in port_enable_store()
603 spin_unlock(&drvdata->spinlock); in port_enable_store()
613 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in traceid_show() local
615 val = drvdata->traceid; in traceid_show()
625 struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent); in traceid_store() local
632 drvdata->traceid = val & 0x7f; in traceid_store()
763 static u32 stm_fundamental_data_size(struct stm_drvdata *drvdata) in stm_fundamental_data_size() argument
770 stmspfeat2r = readl_relaxed(drvdata->base + STMSPFEAT2R); in stm_fundamental_data_size()
780 static u32 stm_num_stimulus_port(struct stm_drvdata *drvdata) in stm_num_stimulus_port() argument
784 numsp = readl_relaxed(drvdata->base + CORESIGHT_DEVID); in stm_num_stimulus_port()
795 static void stm_init_default_data(struct stm_drvdata *drvdata) in stm_init_default_data() argument
798 drvdata->stmspscr = 0x0; in stm_init_default_data()
804 drvdata->stmsper = ~0x0; in stm_init_default_data()
812 drvdata->traceid = 0x1; in stm_init_default_data()
815 bitmap_clear(drvdata->chs.guaranteed, 0, drvdata->numsp); in stm_init_default_data()
818 static void stm_init_generic_data(struct stm_drvdata *drvdata, in stm_init_generic_data() argument
821 drvdata->stm.name = name; in stm_init_generic_data()
827 drvdata->stm.sw_start = 1; in stm_init_generic_data()
828 drvdata->stm.sw_end = 1; in stm_init_generic_data()
829 drvdata->stm.hw_override = true; in stm_init_generic_data()
830 drvdata->stm.sw_nchannels = drvdata->numsp; in stm_init_generic_data()
831 drvdata->stm.sw_mmiosz = BYTES_PER_CHANNEL; in stm_init_generic_data()
832 drvdata->stm.packet = stm_generic_packet; in stm_init_generic_data()
833 drvdata->stm.mmio_addr = stm_mmio_addr; in stm_init_generic_data()
834 drvdata->stm.link = stm_generic_link; in stm_init_generic_data()
835 drvdata->stm.unlink = stm_generic_unlink; in stm_init_generic_data()
836 drvdata->stm.set_options = stm_generic_set_options; in stm_init_generic_data()
845 struct stm_drvdata *drvdata; in stm_probe() local
854 drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); in stm_probe()
855 if (!drvdata) in stm_probe()
858 drvdata->atclk = devm_clk_get(&adev->dev, "atclk"); /* optional */ in stm_probe()
859 if (!IS_ERR(drvdata->atclk)) { in stm_probe()
860 ret = clk_prepare_enable(drvdata->atclk); in stm_probe()
864 dev_set_drvdata(dev, drvdata); in stm_probe()
869 drvdata->base = base; in stm_probe()
875 drvdata->chs.phys = ch_res.start; in stm_probe()
880 drvdata->chs.base = base; in stm_probe()
882 drvdata->write_bytes = stm_fundamental_data_size(drvdata); in stm_probe()
885 drvdata->numsp = boot_nr_channel; in stm_probe()
887 drvdata->numsp = stm_num_stimulus_port(drvdata); in stm_probe()
889 drvdata->chs.guaranteed = devm_bitmap_zalloc(dev, drvdata->numsp, in stm_probe()
891 if (!drvdata->chs.guaranteed) in stm_probe()
894 spin_lock_init(&drvdata->spinlock); in stm_probe()
896 stm_init_default_data(drvdata); in stm_probe()
897 stm_init_generic_data(drvdata, desc.name); in stm_probe()
899 if (stm_register_device(dev, &drvdata->stm, THIS_MODULE)) { in stm_probe()
919 drvdata->csdev = coresight_register(&desc); in stm_probe()
920 if (IS_ERR(drvdata->csdev)) { in stm_probe()
921 ret = PTR_ERR(drvdata->csdev); in stm_probe()
927 dev_info(&drvdata->csdev->dev, "%s initialized\n", in stm_probe()
932 stm_unregister_device(&drvdata->stm); in stm_probe()
938 struct stm_drvdata *drvdata = dev_get_drvdata(&adev->dev); in stm_remove() local
940 coresight_unregister(drvdata->csdev); in stm_remove()
942 stm_unregister_device(&drvdata->stm); in stm_remove()
948 struct stm_drvdata *drvdata = dev_get_drvdata(dev); in stm_runtime_suspend() local
950 if (drvdata && !IS_ERR(drvdata->atclk)) in stm_runtime_suspend()
951 clk_disable_unprepare(drvdata->atclk); in stm_runtime_suspend()
958 struct stm_drvdata *drvdata = dev_get_drvdata(dev); in stm_runtime_resume() local
960 if (drvdata && !IS_ERR(drvdata->atclk)) in stm_runtime_resume()
961 clk_prepare_enable(drvdata->atclk); in stm_runtime_resume()