[Skiboot] [PATCH v3 3/3] npu2: Add vendor cap for IRQ testing

Alistair Popple alistair at popple.id.au
Fri Sep 8 15:44:36 AEST 2017


Acked-By: Alistair Popple <alistair at popple.id.au>

Sam - I talked to Stewart and it would be great if you could submit your test
kernel module as a patch to skiboot/external/<something>. Thanks!

On Tue, 22 Aug 2017 09:58:16 AM Sam Bobroff wrote:
> Provide a way to test recoverable data link interrupts via a new
> vendor capability byte.
> 
> Signed-off-by: Sam Bobroff <sam.bobroff at au1.ibm.com>
> ---
> ====== v2 -> v3: ======
> 
> * Corrected name of NPU RING (no 2). [Andrew Donnellan]
> * Corrected spelling of device. [Andrew Donnellan]
> 
>  hw/npu2.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/hw/npu2.c b/hw/npu2.c
> index 5dbd2167..3acdde89 100644
> --- a/hw/npu2.c
> +++ b/hw/npu2.c
> @@ -1395,6 +1395,25 @@ static uint32_t npu2_populate_pcie_cap(struct npu2_dev *dev,
>  	return start + PCICAP_EXP_SCTL2 + 8;
>  }
>  
> +static int64_t npu2_misc_irq_request(void *dev, struct pci_cfg_reg_filter *pcrf __unused,
> +			   uint32_t offset __unused, uint32_t len __unused, uint32_t *data,
> +			   bool write)
> +{
> +	struct pci_virt_device *pvd = dev;
> +	struct npu2_dev *ndev = pvd->data;
> +	struct npu2 *npu2 = ndev->npu;
> +
> +	uint32_t idx = (ndev->index * 2) + 1;
> +	uint64_t irq_bit = 1ULL << (63 - idx);
> +	uint64_t reg = NPU2_REG_OFFSET(NPU2_STACK_MISC, NPU2_BLOCK_MISC, NPU2_MISC_IRQ_REQUEST);
> +
> +	if (write)
> +		npu2_write(npu2, reg, (*data ? irq_bit : 0));
> +	else
> +		*data = !!(npu2_read(npu2, reg) & irq_bit);
> +	return OPAL_SUCCESS;
> +}
> +
>  static uint32_t npu2_populate_vendor_cap(struct npu2_dev *dev,
>  					 uint32_t start,
>  					 uint32_t prev_cap)
> @@ -1426,6 +1445,15 @@ static uint32_t npu2_populate_vendor_cap(struct npu2_dev *dev,
>  	/* Link index */
>  	PCI_VIRT_CFG_INIT_RO(pvd, start + 0xc, 1, dev->index);
>  
> +	/* Note: VENDOR_CAP_PCI_DEV_OFFSET is next at 0x0d
> +	 * but it is setup later. */
> +
> +	/* Allow triggering of interrupts (MISC_IRQ_REQUEST) by a write to config
> +	 * space: */
> +	pci_virt_add_filter(pvd, start + 0xe, 1,
> +	                    PCI_REG_FLAG_READ | PCI_REG_FLAG_WRITE,
> +	                    npu2_misc_irq_request, NULL);
> +
>  	return start + VENDOR_CAP_LEN;
>  }
>  
> 



More information about the Skiboot mailing list