From: Andrew Jones <drjones@redhat.com>
To: Alexander Gordeev <agordeev@redhat.com>
Cc: kvmarm@lists.cs.columbia.edu
Subject: Re: [kvm-unit-tests PATCH 07/11] arm/pci: PCI device operation test
Date: Fri, 15 Jan 2016 16:32:11 +0100 [thread overview]
Message-ID: <20160115153211.GL3915@hawk.localdomain> (raw)
In-Reply-To: <597fba0ba6cdc84495acd7dd2119d9c785a76548.1452341807.git.agordeev@redhat.com>
On Sat, Jan 09, 2016 at 01:22:54PM +0100, Alexander Gordeev wrote:
> Cc: Andrew Jones <drjones@redhat.com>
> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
> arm/pci-test.c | 2 +-
> lib/pci-testdev.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
> lib/pci.h | 2 +-
> 3 files changed, 138 insertions(+), 5 deletions(-)
>
> diff --git a/arm/pci-test.c b/arm/pci-test.c
> index 695acf9..44e2857 100644
> --- a/arm/pci-test.c
> +++ b/arm/pci-test.c
> @@ -23,7 +23,7 @@ int main(void)
> report("PCI bus scanning detected %d devices", true, ret);
>
> ret = pci_testdev(pci);
> - report("PCI test device", ret);
> + report("PCI test device passed %d tests", (ret >= 6), ret);
>
> pci_shutdown(pci);
>
> diff --git a/lib/pci-testdev.c b/lib/pci-testdev.c
> index a7e0995..de97f82 100644
> --- a/lib/pci-testdev.c
> +++ b/lib/pci-testdev.c
> @@ -11,21 +11,154 @@
> #define PCI_VENDOR_ID_REDHAT 0x1b36
> #define PCI_DEVICE_ID_REDHAT_TEST 0x0005
>
> -bool pci_testdev(struct pci *pci)
> +struct pci_test_dev_hdr {
> + u8 test;
> + u8 width;
> + u8 pad0[2];
> + u32 offset;
> + u32 data;
> + u32 count;
> + u8 name[];
> +};
> +
> +struct pci_testdev_ops {
> + u8 (*read8)(const volatile void *addr);
> + u16 (*read16)(const volatile void *addr);
> + u32 (*read32)(const volatile void *addr);
> + void (*write8)(u8 value, volatile void *addr);
> + void (*write16)(u16 value, volatile void *addr);
> + void (*write32)(u32 value, volatile void *addr);
Please use the standard 'b', 'w', 'l' in these names.
> +};
> +
> +static u8 ioread8(const volatile void *addr)
> +{
> + return readb(addr);
> +}
> +
> +static u16 ioread16(const volatile void *addr)
> +{
> + return readw(addr);
> +}
> +
> +static u32 ioread32(const volatile void *addr)
> +{
> + return readl(addr);
> +}
> +
> +static void iowrite8(u8 value, volatile void *addr)
> +{
> + writeb(value, addr);
> +}
> +
> +static void iowrite16(u16 value, volatile void *addr)
> +{
> + writew(value, addr);
> +}
> +
> +static void iowrite32(u32 value, volatile void *addr)
> +{
> + writel(value, addr);
> +}
> +
> +static struct pci_testdev_ops pci_testdev_io_ops = {
> + .read8 = ioread8,
> + .read16 = ioread16,
> + .read32 = ioread32,
> + .write8 = iowrite8,
> + .write16 = iowrite16,
> + .write32 = iowrite32
> +};
> +
> +static u8 memread8(const volatile void *addr)
> +{
> + return *(const volatile u8 __force *)addr;
> +}
> +
> +static u16 memread16(const volatile void *addr)
> +{
> + return *(const volatile u16 __force *)addr;
> +}
> +
> +static u32 memread32(const volatile void *addr)
> +{
> + return *(const volatile u32 __force *)addr;
> +}
> +
> +static void memwrite8(u8 value, volatile void *addr)
> +{
> + *(volatile u8 __force *)addr = value;
> +}
> +
> +static void memwrite16(u16 value, volatile void *addr)
> +{
> + *(volatile u16 __force *)addr = value;
> +}
> +
> +static void memwrite32(u32 value, volatile void *addr)
> +{
> + *(volatile u32 __force *)addr = value;
> +}
> +
> +static struct pci_testdev_ops pci_testdev_mem_ops = {
> + .read8 = memread8,
> + .read16 = memread16,
> + .read32 = memread32,
> + .write8 = memwrite8,
> + .write16 = memwrite16,
> + .write32 = memwrite32
> +};
> +
> +static bool pci_testdev_one(struct pci_test_dev_hdr *test,
> + int test_nr,
> + struct pci_testdev_ops *ops)
> +{
> + u8 width;
> +
> + ops->write8(test_nr, &test->test);
> + assert(ops->read32(&test->count) == 0);
> +
> + width = ops->read8(&test->width);
> + if ((width != 1) && (width != 2) && (width != 4))
> + return false;
> +
> + return true;
> +}
> +
> +static int pci_testdev_all(struct pci_test_dev_hdr *test,
> + struct pci_testdev_ops *ops)
> +{
> + int i;
> +
> + for (i = 0;; i++) {
> + if (!pci_testdev_one(test, i, ops))
> + break;
> + }
> +
> + return i;
> +}
> +
> +int pci_testdev(struct pci *pci)
> {
> phys_addr_t addr;
> + void __iomem *mem, *io;
> + int nr_tests = 0;
> pcidevaddr_t dev = pci_find_dev(pci,
> PCI_VENDOR_ID_REDHAT,
> PCI_DEVICE_ID_REDHAT_TEST);
>
> if (dev == PCIDEVADDR_INVALID)
> - return false;
> + return 0;
>
> addr = pci_bar_addr(pci, dev, 0);
> assert(addr);
> + mem = ioremap(addr, 0);
>
> addr = pci_bar_addr(pci, dev, 1);
> assert(addr);
> + io = (void*)addr;
>
> - return true;
> + nr_tests += pci_testdev_all(mem, &pci_testdev_mem_ops);
> + nr_tests += pci_testdev_all(io, &pci_testdev_io_ops);
> +
> + return nr_tests;
> }
> diff --git a/lib/pci.h b/lib/pci.h
> index 6af5599..0cb0e27 100644
> --- a/lib/pci.h
> +++ b/lib/pci.h
> @@ -24,7 +24,7 @@ typedef enum {
>
> extern struct pci *pci_dt_probe(void);
> extern int pci_bus_scan(struct pci *pci);
> -extern bool pci_testdev(struct pci *pci);
> +extern int pci_testdev(struct pci *pci);
> extern void pci_shutdown(struct pci *pci);
>
> extern pcidevaddr_t pci_find_dev(struct pci *pci, u16 vendor_id, u16 device_id);
> --
> 1.8.3.1
>
This patch can be squashed into the last one.
Thanks,
drew
next prev parent reply other threads:[~2016-01-15 15:28 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-09 12:22 [kvm-unit-tests PATCH 00/11] pci/arm: add PCI bus support Alexander Gordeev
2016-01-09 12:22 ` [kvm-unit-tests PATCH 01/11] arm/pci: Device tree PCI probing Alexander Gordeev
2016-01-13 15:13 ` Andrew Jones
2016-01-28 15:17 ` Alexander Gordeev
2016-01-28 16:40 ` Andrew Jones
2016-02-05 11:48 ` Alexander Gordeev
2016-02-05 12:18 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 02/11] arm/pci: PCI bus scanning Alexander Gordeev
2016-01-13 15:58 ` Andrew Jones
2016-02-02 9:34 ` Alexander Gordeev
2016-02-02 11:20 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 03/11] arm/pci: Read devices BARs Alexander Gordeev
2016-01-09 12:22 ` [kvm-unit-tests PATCH 04/11] arm/pci: Allocate and assign memory/io space resources Alexander Gordeev
2016-01-09 12:22 ` [kvm-unit-tests PATCH 05/11] arm/pci: Add pci_find_dev() and pci_bar_addr() functions Alexander Gordeev
2016-01-15 15:17 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 06/11] arm/pci: PCI testdev existence test Alexander Gordeev
2016-01-09 12:22 ` [kvm-unit-tests PATCH 07/11] arm/pci: PCI device operation test Alexander Gordeev
2016-01-15 15:32 ` Andrew Jones [this message]
2016-02-04 12:18 ` Alexander Gordeev
2016-02-04 15:31 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 08/11] arm/pci: PCI device read/write test Alexander Gordeev
2016-01-15 15:33 ` Andrew Jones
2016-02-04 12:03 ` Alexander Gordeev
2016-01-15 15:34 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 09/11] arm/pci: PCI host bridge info printing Alexander Gordeev
2016-01-15 15:35 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 10/11] arm/pci: PCI devices basic " Alexander Gordeev
2016-01-15 15:38 ` Andrew Jones
2016-01-09 12:22 ` [kvm-unit-tests PATCH 11/11] arm/pci: PCI testdev test flavour printing Alexander Gordeev
2016-01-15 15:39 ` Andrew Jones
2016-01-15 15:42 ` [kvm-unit-tests PATCH 00/11] pci/arm: add PCI bus support Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160115153211.GL3915@hawk.localdomain \
--to=drjones@redhat.com \
--cc=agordeev@redhat.com \
--cc=kvmarm@lists.cs.columbia.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.