Loading drivers/hwtracing/coresight/coresight-stm.c +25 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <linux/perf_event.h> #include <linux/pm_runtime.h> #include <linux/stm.h> #include <linux/nvmem-consumer.h> #include "coresight-ost.h" #include "coresight-priv.h" Loading Loading @@ -75,8 +76,10 @@ /* Reserve the first 10 channels for kernel usage */ #define STM_CHANNEL_OFFSET 0 DEFINE_CORESIGHT_DEVLIST(stm_devs, "stm"); #define APPS_NIDEN_SHIFT 17 #define APPS_DBGEN_SHIFT 16 DEFINE_CORESIGHT_DEVLIST(stm_devs, "stm"); static int boot_nr_channel; /* Loading Loading @@ -363,6 +366,9 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data, if (!(drvdata && local_read(&drvdata->mode))) return -EACCES; if (!drvdata->master_enable) return -EPERM; if (channel >= drvdata->numsp) return -EINVAL; Loading Loading @@ -851,6 +857,13 @@ static void stm_init_generic_data(struct stm_drvdata *drvdata, drvdata->stm.set_options = stm_generic_set_options; } static bool is_apps_debug_disabled(u32 val) { val &= BIT(APPS_NIDEN_SHIFT); return val == 0; } static int stm_probe(struct amba_device *adev, const struct amba_id *id) { int ret; Loading @@ -862,6 +875,7 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) struct resource *res = &adev->res; struct resource ch_res; size_t bitmap_size; uint32_t val; struct coresight_desc desc = { 0 }; desc.name = coresight_alloc_device_name(&stm_devs, dev); Loading Loading @@ -895,6 +909,13 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) return PTR_ERR(base); drvdata->chs.base = base; ret = nvmem_cell_read_u32(&adev->dev, "debug_fuse", &val); if (!ret) drvdata->master_enable = !is_apps_debug_disabled(val); else drvdata->master_enable = true; drvdata->write_bytes = stm_fundamental_data_size(drvdata); if (boot_nr_channel) Loading Loading @@ -948,8 +969,9 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) pm_runtime_put(&adev->dev); dev_info(&drvdata->csdev->dev, "%s initialized\n", (char *)coresight_get_uci_data(id)); dev_info(dev, "%s initialized with master %s\n", (char *)coresight_get_uci_data(id), drvdata->master_enable ? "Enabled" : "Disabled"); return 0; stm_unregister: Loading include/linux/coresight-stm.h +2 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ struct stm_drvdata { spinlock_t spinlock; struct channel_space chs; bool enable; struct channel_space debug_status_chs; bool master_enable; DECLARE_BITMAP(entities, OST_ENTITY_MAX); struct stm_data stm; local_t mode; Loading Loading
drivers/hwtracing/coresight/coresight-stm.c +25 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <linux/perf_event.h> #include <linux/pm_runtime.h> #include <linux/stm.h> #include <linux/nvmem-consumer.h> #include "coresight-ost.h" #include "coresight-priv.h" Loading Loading @@ -75,8 +76,10 @@ /* Reserve the first 10 channels for kernel usage */ #define STM_CHANNEL_OFFSET 0 DEFINE_CORESIGHT_DEVLIST(stm_devs, "stm"); #define APPS_NIDEN_SHIFT 17 #define APPS_DBGEN_SHIFT 16 DEFINE_CORESIGHT_DEVLIST(stm_devs, "stm"); static int boot_nr_channel; /* Loading Loading @@ -363,6 +366,9 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data, if (!(drvdata && local_read(&drvdata->mode))) return -EACCES; if (!drvdata->master_enable) return -EPERM; if (channel >= drvdata->numsp) return -EINVAL; Loading Loading @@ -851,6 +857,13 @@ static void stm_init_generic_data(struct stm_drvdata *drvdata, drvdata->stm.set_options = stm_generic_set_options; } static bool is_apps_debug_disabled(u32 val) { val &= BIT(APPS_NIDEN_SHIFT); return val == 0; } static int stm_probe(struct amba_device *adev, const struct amba_id *id) { int ret; Loading @@ -862,6 +875,7 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) struct resource *res = &adev->res; struct resource ch_res; size_t bitmap_size; uint32_t val; struct coresight_desc desc = { 0 }; desc.name = coresight_alloc_device_name(&stm_devs, dev); Loading Loading @@ -895,6 +909,13 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) return PTR_ERR(base); drvdata->chs.base = base; ret = nvmem_cell_read_u32(&adev->dev, "debug_fuse", &val); if (!ret) drvdata->master_enable = !is_apps_debug_disabled(val); else drvdata->master_enable = true; drvdata->write_bytes = stm_fundamental_data_size(drvdata); if (boot_nr_channel) Loading Loading @@ -948,8 +969,9 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) pm_runtime_put(&adev->dev); dev_info(&drvdata->csdev->dev, "%s initialized\n", (char *)coresight_get_uci_data(id)); dev_info(dev, "%s initialized with master %s\n", (char *)coresight_get_uci_data(id), drvdata->master_enable ? "Enabled" : "Disabled"); return 0; stm_unregister: Loading
include/linux/coresight-stm.h +2 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ struct stm_drvdata { spinlock_t spinlock; struct channel_space chs; bool enable; struct channel_space debug_status_chs; bool master_enable; DECLARE_BITMAP(entities, OST_ENTITY_MAX); struct stm_data stm; local_t mode; Loading