diff mbox

[V2,11/23] arm64, pci: Remove useless boot time IRQ assignment when booting with DT.

Message ID 1450278993-12664-12-git-send-email-tn@semihalf.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tomasz Nowicki Dec. 16, 2015, 3:16 p.m. UTC
In order to probe PCIe host controller when booting with DT,
ARM64 is using drivers which defer IRQ assignment to device
enable time. It means that boot time DT specific irq map initialization
is always overridden, so lets remove that code.

Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
---
 arch/arm64/kernel/pci.c | 10 ----------
 1 file changed, 10 deletions(-)

Comments

Lorenzo Pieralisi Jan. 12, 2016, 1:50 p.m. UTC | #1
On Wed, Dec 16, 2015 at 04:16:21PM +0100, Tomasz Nowicki wrote:
> In order to probe PCIe host controller when booting with DT,
> ARM64 is using drivers which defer IRQ assignment to device
> enable time. It means that boot time DT specific irq map initialization
> is always overridden, so lets remove that code.
> 
> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
> ---
>  arch/arm64/kernel/pci.c | 10 ----------
>  1 file changed, 10 deletions(-)
> 
> diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
> index 023b983..f7948f5 100644
> --- a/arch/arm64/kernel/pci.c
> +++ b/arch/arm64/kernel/pci.c
> @@ -51,16 +51,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
>  	return pci_enable_resources(dev, mask);
>  }
>  
> -/*
> - * Try to assign the IRQ number from DT when adding a new device
> - */
> -int pcibios_add_device(struct pci_dev *dev)
> -{
> -	dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
> -
> -	return 0;
> -}
> -

Actually, this patch should be part of Matthew's series:

http://comments.gmane.org/gmane.linux.kernel.pci/46461

Lorenzo
Tomasz Nowicki Jan. 12, 2016, 4:13 p.m. UTC | #2
On 12.01.2016 14:50, Lorenzo Pieralisi wrote:
> On Wed, Dec 16, 2015 at 04:16:21PM +0100, Tomasz Nowicki wrote:
>> In order to probe PCIe host controller when booting with DT,
>> ARM64 is using drivers which defer IRQ assignment to device
>> enable time. It means that boot time DT specific irq map initialization
>> is always overridden, so lets remove that code.
>>
>> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
>> ---
>>   arch/arm64/kernel/pci.c | 10 ----------
>>   1 file changed, 10 deletions(-)
>>
>> diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
>> index 023b983..f7948f5 100644
>> --- a/arch/arm64/kernel/pci.c
>> +++ b/arch/arm64/kernel/pci.c
>> @@ -51,16 +51,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
>>   	return pci_enable_resources(dev, mask);
>>   }
>>
>> -/*
>> - * Try to assign the IRQ number from DT when adding a new device
>> - */
>> -int pcibios_add_device(struct pci_dev *dev)
>> -{
>> -	dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
>> -
>> -	return 0;
>> -}
>> -
>
> Actually, this patch should be part of Matthew's series:
>

Agree.

Matthew can you please add this patch to your series?

Thanks,
Tomasz
David Daney Jan. 12, 2016, 5:56 p.m. UTC | #3
On 01/12/2016 08:13 AM, Tomasz Nowicki wrote:
> On 12.01.2016 14:50, Lorenzo Pieralisi wrote:
>> On Wed, Dec 16, 2015 at 04:16:21PM +0100, Tomasz Nowicki wrote:
>>> In order to probe PCIe host controller when booting with DT,
>>> ARM64 is using drivers which defer IRQ assignment to device
>>> enable time. It means that boot time DT specific irq map initialization
>>> is always overridden, so lets remove that code.
>>>
>>> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
>>> ---
>>>   arch/arm64/kernel/pci.c | 10 ----------
>>>   1 file changed, 10 deletions(-)
>>>
>>> diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
>>> index 023b983..f7948f5 100644
>>> --- a/arch/arm64/kernel/pci.c
>>> +++ b/arch/arm64/kernel/pci.c
>>> @@ -51,16 +51,6 @@ int pcibios_enable_device(struct pci_dev *dev, int
>>> mask)
>>>       return pci_enable_resources(dev, mask);
>>>   }
>>>
>>> -/*
>>> - * Try to assign the IRQ number from DT when adding a new device
>>> - */
>>> -int pcibios_add_device(struct pci_dev *dev)
>>> -{
>>> -    dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
>>> -
>>> -    return 0;
>>> -}
>>> -

How was this tested?  Or in other words, what PCI devices that use 
legacy INT{A,B,C,D} interrupts were used in testing this patch?

David Daney


>>
>> Actually, this patch should be part of Matthew's series:
>>
>
> Agree.
>
> Matthew can you please add this patch to your series?
>
> Thanks,
> Tomasz
Tomasz Nowicki Jan. 13, 2016, 9:43 a.m. UTC | #4
On 12.01.2016 18:56, David Daney wrote:
> On 01/12/2016 08:13 AM, Tomasz Nowicki wrote:
>> On 12.01.2016 14:50, Lorenzo Pieralisi wrote:
>>> On Wed, Dec 16, 2015 at 04:16:21PM +0100, Tomasz Nowicki wrote:
>>>> In order to probe PCIe host controller when booting with DT,
>>>> ARM64 is using drivers which defer IRQ assignment to device
>>>> enable time. It means that boot time DT specific irq map initialization
>>>> is always overridden, so lets remove that code.
>>>>
>>>> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
>>>> ---
>>>>   arch/arm64/kernel/pci.c | 10 ----------
>>>>   1 file changed, 10 deletions(-)
>>>>
>>>> diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
>>>> index 023b983..f7948f5 100644
>>>> --- a/arch/arm64/kernel/pci.c
>>>> +++ b/arch/arm64/kernel/pci.c
>>>> @@ -51,16 +51,6 @@ int pcibios_enable_device(struct pci_dev *dev, int
>>>> mask)
>>>>       return pci_enable_resources(dev, mask);
>>>>   }
>>>>
>>>> -/*
>>>> - * Try to assign the IRQ number from DT when adding a new device
>>>> - */
>>>> -int pcibios_add_device(struct pci_dev *dev)
>>>> -{
>>>> -    dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
>>>> -
>>>> -    return 0;
>>>> -}
>>>> -
>
> How was this tested?  Or in other words, what PCI devices that use
> legacy INT{A,B,C,D} interrupts were used in testing this patch?
>

I used QEMU and e1000 NIC:

sudo ./qemu/aarch64-softmmu/qemu-system-aarch64 -smp 1 -m 1024 -M virt 
-cpu cortex-a57 -nographic -device 
e1000,netdev=net1,mac=52:54:00:12:34:56 -netdev 
type=tap,ifname=tun1,id=net1,script=no,downscript=no -drive 
file=qemu/ubuntu.img,id=root,if=none,format=raw -device 
virtio-blk-device,drive=root -kernel linux-aarch64/arch/arm64/boot/Image 
-append "console=ttyAMA0 earlycon=pl011,0x9000000 rw root=/dev/vda"

root@ubuntu:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56
           inet addr:10.0.0.48  Bcast:10.0.255.255  Mask:255.255.0.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:107 errors:0 dropped:0 overruns:0 frame:0
           TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:18087 (18.0 KB)  TX bytes:3818 (3.8 KB)

root@ubuntu:~# cat /proc/interrupts
            CPU0
  39:        280       GIC  36 Level     eth0

root@ubuntu:~# lspci -vvv
00:00.0 Host bridge: Red Hat, Inc. Device 0008
         Subsystem: Red Hat, Inc Device 1100
         Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- 
ParErr- Stepping- SERR- FastB2B- DisINTx-
         Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-

00:01.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet 
Controller (rev 03)
         Subsystem: Red Hat, Inc QEMU Virtual Machine
         Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- 
ParErr- Stepping- SERR- FastB2B- DisINTx-
         Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
         Latency: 0
         Interrupt: pin A routed to IRQ 39
         Region 0: Memory at 10040000 (32-bit, non-prefetchable) [size=128K]
         Region 1: I/O ports at 1000 [size=64]
         [virtual] Expansion ROM at 10000000 [disabled] [size=256K]
         Kernel driver in use: e1000

Any specific concern w.r.t. this patch?

Tomasz
diff mbox

Patch

diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
index 023b983..f7948f5 100644
--- a/arch/arm64/kernel/pci.c
+++ b/arch/arm64/kernel/pci.c
@@ -51,16 +51,6 @@  int pcibios_enable_device(struct pci_dev *dev, int mask)
 	return pci_enable_resources(dev, mask);
 }
 
-/*
- * Try to assign the IRQ number from DT when adding a new device
- */
-int pcibios_add_device(struct pci_dev *dev)
-{
-	dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
-
-	return 0;
-}
-
 #ifdef CONFIG_ACPI
 /* Root bridge scanning */
 struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)