mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 10:19:47 +00:00
intel_th: Add "rtit" source device
In some versions of Intel TH, the Software Trace Hub (STH) has a second MMIO BAR dedicated to the input from Intel PT. This calls for a new subdevice that will be enumerated if the corresponding BAR is present. Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
23f667494b
commit
fc027f4ce7
3 changed files with 27 additions and 3 deletions
|
@ -500,6 +500,24 @@ static const struct intel_th_subdevice {
|
||||||
.name = "sth",
|
.name = "sth",
|
||||||
.type = INTEL_TH_SOURCE,
|
.type = INTEL_TH_SOURCE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.nres = 2,
|
||||||
|
.res = {
|
||||||
|
{
|
||||||
|
.start = REG_STH_OFFSET,
|
||||||
|
.end = REG_STH_OFFSET + REG_STH_LENGTH - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.start = TH_MMIO_RTIT,
|
||||||
|
.end = 0,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
.id = -1,
|
||||||
|
.name = "rtit",
|
||||||
|
.type = INTEL_TH_SOURCE,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.nres = 1,
|
.nres = 1,
|
||||||
.res = {
|
.res = {
|
||||||
|
|
|
@ -228,6 +228,7 @@ int intel_th_output_enable(struct intel_th *th, unsigned int otype);
|
||||||
enum th_mmio_idx {
|
enum th_mmio_idx {
|
||||||
TH_MMIO_CONFIG = 0,
|
TH_MMIO_CONFIG = 0,
|
||||||
TH_MMIO_SW = 1,
|
TH_MMIO_SW = 1,
|
||||||
|
TH_MMIO_RTIT = 2,
|
||||||
TH_MMIO_END,
|
TH_MMIO_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
enum {
|
enum {
|
||||||
TH_PCI_CONFIG_BAR = 0,
|
TH_PCI_CONFIG_BAR = 0,
|
||||||
TH_PCI_STH_SW_BAR = 2,
|
TH_PCI_STH_SW_BAR = 2,
|
||||||
|
TH_PCI_RTIT_BAR = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BAR_MASK (BIT(TH_PCI_CONFIG_BAR) | BIT(TH_PCI_STH_SW_BAR))
|
#define BAR_MASK (BIT(TH_PCI_CONFIG_BAR) | BIT(TH_PCI_STH_SW_BAR))
|
||||||
|
@ -75,8 +76,8 @@ static int intel_th_pci_probe(struct pci_dev *pdev,
|
||||||
[TH_MMIO_CONFIG] = pdev->resource[TH_PCI_CONFIG_BAR],
|
[TH_MMIO_CONFIG] = pdev->resource[TH_PCI_CONFIG_BAR],
|
||||||
[TH_MMIO_SW] = pdev->resource[TH_PCI_STH_SW_BAR],
|
[TH_MMIO_SW] = pdev->resource[TH_PCI_STH_SW_BAR],
|
||||||
};
|
};
|
||||||
|
int err, r = TH_MMIO_SW + 1;
|
||||||
struct intel_th *th;
|
struct intel_th *th;
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pcim_enable_device(pdev);
|
err = pcim_enable_device(pdev);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -86,8 +87,12 @@ static int intel_th_pci_probe(struct pci_dev *pdev,
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
th = intel_th_alloc(&pdev->dev, drvdata, resource, TH_MMIO_END,
|
if (pdev->resource[TH_PCI_RTIT_BAR].start) {
|
||||||
pdev->irq);
|
resource[TH_MMIO_RTIT] = pdev->resource[TH_PCI_RTIT_BAR];
|
||||||
|
r++;
|
||||||
|
}
|
||||||
|
|
||||||
|
th = intel_th_alloc(&pdev->dev, drvdata, resource, r, pdev->irq);
|
||||||
if (IS_ERR(th))
|
if (IS_ERR(th))
|
||||||
return PTR_ERR(th);
|
return PTR_ERR(th);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue