mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 02:09:42 +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",
|
||||
.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,
|
||||
.res = {
|
||||
|
|
|
@ -228,6 +228,7 @@ int intel_th_output_enable(struct intel_th *th, unsigned int otype);
|
|||
enum th_mmio_idx {
|
||||
TH_MMIO_CONFIG = 0,
|
||||
TH_MMIO_SW = 1,
|
||||
TH_MMIO_RTIT = 2,
|
||||
TH_MMIO_END,
|
||||
};
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
enum {
|
||||
TH_PCI_CONFIG_BAR = 0,
|
||||
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))
|
||||
|
@ -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_SW] = pdev->resource[TH_PCI_STH_SW_BAR],
|
||||
};
|
||||
int err, r = TH_MMIO_SW + 1;
|
||||
struct intel_th *th;
|
||||
int err;
|
||||
|
||||
err = pcim_enable_device(pdev);
|
||||
if (err)
|
||||
|
@ -86,8 +87,12 @@ static int intel_th_pci_probe(struct pci_dev *pdev,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
th = intel_th_alloc(&pdev->dev, drvdata, resource, TH_MMIO_END,
|
||||
pdev->irq);
|
||||
if (pdev->resource[TH_PCI_RTIT_BAR].start) {
|
||||
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))
|
||||
return PTR_ERR(th);
|
||||
|
||||
|
|
Loading…
Reference in a new issue