Loading drivers/hwtracing/coresight/coresight-tmc-etf.c +7 −1 Original line number Diff line number Diff line Loading @@ -171,8 +171,11 @@ static int tmc_enable_etf_sink_sysfs(struct coresight_device *csdev, u32 mode) if (!used) kfree(buf); if (!ret) if (!ret) { coresight_cti_map_trigin(drvdata->cti_reset, 2, 0); coresight_cti_map_trigout(drvdata->cti_flush, 1, 0); dev_info(drvdata->dev, "TMC-ETB/ETF enabled\n"); } return ret; } Loading Loading @@ -244,6 +247,9 @@ static void tmc_disable_etf_sink(struct coresight_device *csdev) spin_unlock_irqrestore(&drvdata->spinlock, flags); coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0); coresight_cti_unmap_trigout(drvdata->cti_flush, 1, 0); dev_info(drvdata->dev, "TMC-ETB/ETF disabled\n"); } Loading drivers/hwtracing/coresight/coresight-tmc-etr.c +8 −0 Original line number Diff line number Diff line Loading @@ -800,6 +800,8 @@ static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev, u32 mode) mutex_unlock(&drvdata->mem_lock); return ret; } coresight_cti_map_trigout(drvdata->cti_flush, 3, 0); coresight_cti_map_trigin(drvdata->cti_reset, 2, 0); } else { drvdata->usbch = usb_qdss_open("qdss", drvdata, usb_notifier); Loading Loading @@ -891,6 +893,7 @@ static void tmc_disable_etr_sink(struct coresight_device *csdev) unsigned long flags; struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); mutex_lock(&drvdata->mem_lock); spin_lock_irqsave(&drvdata->spinlock, flags); if (drvdata->reading) { spin_unlock_irqrestore(&drvdata->spinlock, flags); Loading @@ -911,6 +914,11 @@ static void tmc_disable_etr_sink(struct coresight_device *csdev) spin_unlock_irqrestore(&drvdata->spinlock, flags); if (drvdata->out_mode == TMC_ETR_OUT_MODE_MEM) { coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0); coresight_cti_unmap_trigout(drvdata->cti_flush, 3, 0); } mutex_unlock(&drvdata->mem_lock); dev_info(drvdata->dev, "TMC-ETR disabled\n"); } Loading drivers/hwtracing/coresight/coresight-tmc.c +20 −0 Original line number Diff line number Diff line Loading @@ -361,6 +361,9 @@ static ssize_t out_mode_store(struct device *dev, drvdata->out_mode = TMC_ETR_OUT_MODE_MEM; spin_unlock_irqrestore(&drvdata->spinlock, flags); coresight_cti_map_trigout(drvdata->cti_flush, 3, 0); coresight_cti_map_trigin(drvdata->cti_reset, 2, 0); tmc_etr_bam_disable(drvdata); usb_qdss_close(drvdata->usbch); } else if (!strcmp(str, str_tmc_etr_out_mode[TMC_ETR_OUT_MODE_USB])) { Loading @@ -381,6 +384,9 @@ static ssize_t out_mode_store(struct device *dev, drvdata->out_mode = TMC_ETR_OUT_MODE_USB; spin_unlock_irqrestore(&drvdata->spinlock, flags); coresight_cti_unmap_trigout(drvdata->cti_flush, 3, 0); coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0); drvdata->usbch = usb_qdss_open("qdss", drvdata, usb_notifier); if (IS_ERR(drvdata->usbch)) { Loading Loading @@ -503,6 +509,7 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id) struct resource *res = &adev->res; struct coresight_desc desc = { 0 }; struct device_node *np = adev->dev.of_node; struct coresight_cti_data *ctidata; pdata = of_get_coresight_platform_data(dev, np); if (IS_ERR(pdata)) { Loading Loading @@ -554,6 +561,19 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id) pm_runtime_put(&adev->dev); ctidata = of_get_coresight_cti_data(dev, adev->dev.of_node); if (IS_ERR(ctidata)) { dev_err(dev, "invalid cti data\n"); } else if (ctidata && ctidata->nr_ctis == 2) { drvdata->cti_flush = coresight_cti_get(ctidata->names[0]); if (IS_ERR(drvdata->cti_flush)) dev_err(dev, "failed to get flush cti\n"); drvdata->cti_reset = coresight_cti_get(ctidata->names[1]); if (IS_ERR(drvdata->cti_reset)) dev_err(dev, "failed to get reset cti\n"); } desc.pdata = pdata; desc.dev = dev; if (drvdata->config_type == TMC_CONFIG_TYPE_ETB) { Loading drivers/hwtracing/coresight/coresight-tmc.h +3 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/amba/bus.h> #include <linux/usb_bam.h> #include <linux/usb/usb_qdss.h> #include <linux/coresight-cti.h> #define TMC_RSZ 0x004 #define TMC_STS 0x00c Loading Loading @@ -184,7 +185,8 @@ struct tmc_drvdata { struct tmc_etr_bam_data *bamdata; bool enable_to_bam; bool sticky_enable; struct coresight_cti *cti_flush; struct coresight_cti *cti_reset; }; /* Generic functions */ Loading Loading
drivers/hwtracing/coresight/coresight-tmc-etf.c +7 −1 Original line number Diff line number Diff line Loading @@ -171,8 +171,11 @@ static int tmc_enable_etf_sink_sysfs(struct coresight_device *csdev, u32 mode) if (!used) kfree(buf); if (!ret) if (!ret) { coresight_cti_map_trigin(drvdata->cti_reset, 2, 0); coresight_cti_map_trigout(drvdata->cti_flush, 1, 0); dev_info(drvdata->dev, "TMC-ETB/ETF enabled\n"); } return ret; } Loading Loading @@ -244,6 +247,9 @@ static void tmc_disable_etf_sink(struct coresight_device *csdev) spin_unlock_irqrestore(&drvdata->spinlock, flags); coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0); coresight_cti_unmap_trigout(drvdata->cti_flush, 1, 0); dev_info(drvdata->dev, "TMC-ETB/ETF disabled\n"); } Loading
drivers/hwtracing/coresight/coresight-tmc-etr.c +8 −0 Original line number Diff line number Diff line Loading @@ -800,6 +800,8 @@ static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev, u32 mode) mutex_unlock(&drvdata->mem_lock); return ret; } coresight_cti_map_trigout(drvdata->cti_flush, 3, 0); coresight_cti_map_trigin(drvdata->cti_reset, 2, 0); } else { drvdata->usbch = usb_qdss_open("qdss", drvdata, usb_notifier); Loading Loading @@ -891,6 +893,7 @@ static void tmc_disable_etr_sink(struct coresight_device *csdev) unsigned long flags; struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); mutex_lock(&drvdata->mem_lock); spin_lock_irqsave(&drvdata->spinlock, flags); if (drvdata->reading) { spin_unlock_irqrestore(&drvdata->spinlock, flags); Loading @@ -911,6 +914,11 @@ static void tmc_disable_etr_sink(struct coresight_device *csdev) spin_unlock_irqrestore(&drvdata->spinlock, flags); if (drvdata->out_mode == TMC_ETR_OUT_MODE_MEM) { coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0); coresight_cti_unmap_trigout(drvdata->cti_flush, 3, 0); } mutex_unlock(&drvdata->mem_lock); dev_info(drvdata->dev, "TMC-ETR disabled\n"); } Loading
drivers/hwtracing/coresight/coresight-tmc.c +20 −0 Original line number Diff line number Diff line Loading @@ -361,6 +361,9 @@ static ssize_t out_mode_store(struct device *dev, drvdata->out_mode = TMC_ETR_OUT_MODE_MEM; spin_unlock_irqrestore(&drvdata->spinlock, flags); coresight_cti_map_trigout(drvdata->cti_flush, 3, 0); coresight_cti_map_trigin(drvdata->cti_reset, 2, 0); tmc_etr_bam_disable(drvdata); usb_qdss_close(drvdata->usbch); } else if (!strcmp(str, str_tmc_etr_out_mode[TMC_ETR_OUT_MODE_USB])) { Loading @@ -381,6 +384,9 @@ static ssize_t out_mode_store(struct device *dev, drvdata->out_mode = TMC_ETR_OUT_MODE_USB; spin_unlock_irqrestore(&drvdata->spinlock, flags); coresight_cti_unmap_trigout(drvdata->cti_flush, 3, 0); coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0); drvdata->usbch = usb_qdss_open("qdss", drvdata, usb_notifier); if (IS_ERR(drvdata->usbch)) { Loading Loading @@ -503,6 +509,7 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id) struct resource *res = &adev->res; struct coresight_desc desc = { 0 }; struct device_node *np = adev->dev.of_node; struct coresight_cti_data *ctidata; pdata = of_get_coresight_platform_data(dev, np); if (IS_ERR(pdata)) { Loading Loading @@ -554,6 +561,19 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id) pm_runtime_put(&adev->dev); ctidata = of_get_coresight_cti_data(dev, adev->dev.of_node); if (IS_ERR(ctidata)) { dev_err(dev, "invalid cti data\n"); } else if (ctidata && ctidata->nr_ctis == 2) { drvdata->cti_flush = coresight_cti_get(ctidata->names[0]); if (IS_ERR(drvdata->cti_flush)) dev_err(dev, "failed to get flush cti\n"); drvdata->cti_reset = coresight_cti_get(ctidata->names[1]); if (IS_ERR(drvdata->cti_reset)) dev_err(dev, "failed to get reset cti\n"); } desc.pdata = pdata; desc.dev = dev; if (drvdata->config_type == TMC_CONFIG_TYPE_ETB) { Loading
drivers/hwtracing/coresight/coresight-tmc.h +3 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/amba/bus.h> #include <linux/usb_bam.h> #include <linux/usb/usb_qdss.h> #include <linux/coresight-cti.h> #define TMC_RSZ 0x004 #define TMC_STS 0x00c Loading Loading @@ -184,7 +185,8 @@ struct tmc_drvdata { struct tmc_etr_bam_data *bamdata; bool enable_to_bam; bool sticky_enable; struct coresight_cti *cti_flush; struct coresight_cti *cti_reset; }; /* Generic functions */ Loading