lkml.org 
[lkml]   [2018]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v4 5/5] misc: pci_endpoint_test: Handle 64-bit BARs properly
    From
    Date


    On Thursday 08 March 2018 07:03 PM, Niklas Cassel wrote:
    > A 64-bit BAR consists of a BAR pair, where the second BAR has the
    > upper bits, so we cannot simply call pci_ioremap_bar() on every single
    > BAR index.
    >
    > The second BAR in a BAR pair will not have the IORESOURCE_MEM resource
    > flag set. Only call ioremap on BARs that have the IORESOURCE_MEM
    > resource flag set.
    >
    > pci 0000:01:00.0: BAR 4: assigned [mem 0xc0300000-0xc031ffff 64bit]
    > pci 0000:01:00.0: BAR 2: assigned [mem 0xc0320000-0xc03203ff 64bit]
    > pci 0000:01:00.0: BAR 0: assigned [mem 0xc0320400-0xc03204ff 64bit]
    > pci-endpoint-test 0000:01:00.0: can't ioremap BAR 1: [??? 0x00000000 flags 0x0]
    > pci-endpoint-test 0000:01:00.0: failed to read BAR1
    > pci-endpoint-test 0000:01:00.0: can't ioremap BAR 3: [??? 0x00000000 flags 0x0]
    > pci-endpoint-test 0000:01:00.0: failed to read BAR3
    > pci-endpoint-test 0000:01:00.0: can't ioremap BAR 5: [??? 0x00000000 flags 0x0]
    > pci-endpoint-test 0000:01:00.0: failed to read BAR5
    >
    > Signed-off-by: Niklas Cassel <niklas.cassel@axis.com>

    Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
    > ---
    > drivers/misc/pci_endpoint_test.c | 12 +++++++-----
    > 1 file changed, 7 insertions(+), 5 deletions(-)
    >
    > diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
    > index 320276f42653..fe8897e64635 100644
    > --- a/drivers/misc/pci_endpoint_test.c
    > +++ b/drivers/misc/pci_endpoint_test.c
    > @@ -534,12 +534,14 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev,
    > }
    >
    > for (bar = BAR_0; bar <= BAR_5; bar++) {
    > - base = pci_ioremap_bar(pdev, bar);
    > - if (!base) {
    > - dev_err(dev, "failed to read BAR%d\n", bar);
    > - WARN_ON(bar == test_reg_bar);
    > + if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
    > + base = pci_ioremap_bar(pdev, bar);
    > + if (!base) {
    > + dev_err(dev, "failed to read BAR%d\n", bar);
    > + WARN_ON(bar == test_reg_bar);
    > + }
    > + test->bar[bar] = base;
    > }
    > - test->bar[bar] = base;
    > }
    >
    > test->base = test->bar[test_reg_bar];
    >

    \
     
     \ /
      Last update: 2018-03-21 06:56    [W:2.480 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site