Discussion:
[gem5-dev] Review Request 2301: config: add ethernet support for x86 fullsystem
(too old to reply)
Andreas Hansson via gem5-dev
2014-06-13 17:40:19 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5136
-----------------------------------------------------------



configs/common/FSConfig.py
<http://reviews.gem5.org/r/2301/#comment4657>

It would be better if a suitable range was added to the bridge.


- Andreas Hansson
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 13, 2014, 9:23 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- connect 'default' port of x86_sys.membus to io bridge instead of badaddr_responder,
access to pci address space will pass though membus to iobridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Andreas Hansson via gem5-dev
2014-06-17 14:54:04 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5139
-----------------------------------------------------------



configs/common/FSConfig.py
<http://reviews.gem5.org/r/2301/#comment4659>

I do not understand why this is not covered by the last statement, i.e. the Pci config space until the end of 64-bit space.



configs/common/FSConfig.py
<http://reviews.gem5.org/r/2301/#comment4660>

It would be good to add a line describing where the values come from.



configs/common/FSConfig.py
<http://reviews.gem5.org/r/2301/#comment4661>

Since the bus order is important, I'd suggest copying the statement around this from the patch summary and make sure it also appears in comments in the code.


- Andreas Hansson
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 16, 2014, 1:06 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-06-18 00:58:11 UTC
Permalink
Post by Andreas Hansson via gem5-dev
configs/common/FSConfig.py, line 348
<http://reviews.gem5.org/r/2301/diff/2/?file=39993#file39993line348>
I do not understand why this is not covered by the last statement, i.e. the Pci config space until the end of 64-bit space.
"[pci_config_address_space_base, Addr.max]" was the PCI config space, which only contains PCI config data (e.g. BAR0-5, VendorID, ...)

linux kernel config PCI BARx when probe device, remap ioport/iomem of device to host's address space (e.g. in my 32MB memory config, ethernet device's iomem was mapped to "10000000-1001ffff : 0000:00:02.0")
the BARx was 32-bit length and must be less than 4GB which is not covered by [pci_config_address_space_base, Addr.max]

p.s. this patch will not work when pci device support 64-bit memory BAR in the future, because kernel may config PCI BARx above 4GB


- Jiuyue


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5139
-----------------------------------------------------------
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 16, 2014, 1:06 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-06-18 01:43:15 UTC
Permalink
Post by Andreas Hansson via gem5-dev
configs/common/FSConfig.py, line 429
<http://reviews.gem5.org/r/2301/diff/2/?file=39993#file39993line429>
It would be good to add a line describing where the values come from.
Change InterruptLine from IRQ13(reserved for co-processor/FPU) to IRQ10(open interrupt/available or SCSI or NIC)
reference http://en.wikipedia.org/wiki/Interrupt_request#x86_IRQs


- Jiuyue


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5139
-----------------------------------------------------------
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 18, 2014, 1:42 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-06-18 01:42:48 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------

(Updated June 18, 2014, 1:42 a.m.)


Review request for Default.


Changes
-------

change IRQ of ethernet from IRQ13 to IRQ10
add comment for IGbE config
add comment for bus_id config of X86IntelMPTable


Repository: gem5


Description
-------

config: add ethernet support for x86 fullsystem

This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
following changes were also made to FSConfig.py:

- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge

- add IGbE_e1000 to x86_sys.pc.ethernet

- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus

- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI


Diffs (updated)
-----

configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44

Diff: http://reviews.gem5.org/r/2301/diff/


Testing
-------


Thanks,

Jiuyue Ma
Andreas Sandberg via gem5-dev
2014-07-15 13:26:25 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5190
-----------------------------------------------------------


Could you split this into two (or potentially three) different patches?

The PCI/ISA bus ID fixes look fine and should definitely go upstream ASAP. As far as I'm concerned that particular part of the patch can be submitted separately right away as it is a small bug fixes that is limited to a few lines.

I'm not so sure about the bridge ranges though. The PCI specification seems to allow devices to be mapped to pretty much any region of the memory space, so we can probably not do what you're doing currently to determine the range. Unfortunately, I can't think of a good solution off the top of my head. I'll discuss it with some colleagues and get back to you.


configs/common/FSConfig.py
<http://reviews.gem5.org/r/2301/#comment4746>

I might be wrong here, but I think the InterruptLine is actually the interrupt line as seen by the APIC. It doesn't have anything to do with the actual CPU interrupt since the APIC sorts out the routing. If this is the case, get rid of that part of the comment to avoid confusion.


- Andreas Sandberg
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 18, 2014, 3:42 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-07-16 09:45:32 UTC
Permalink
Post by Andreas Hansson via gem5-dev
configs/common/FSConfig.py, line 431
<http://reviews.gem5.org/r/2301/diff/3/?file=40047#file40047line431>
I might be wrong here, but I think the InterruptLine is actually the interrupt line as seen by the APIC. It doesn't have anything to do with the actual CPU interrupt since the APIC sorts out the routing. If this is the case, get rid of that part of the comment to avoid confusion.
Yes, you are right. The InterruptLine is the interrupt line as seen by the APIC. I will remove these comments.

An interesting thing is when I change this value in python config, kernel also see the same change. I have no idea of why this happened, maybe kernel init irq routing table using hardware probed InterruptLine when system startup? I only found irq assign in generic pci driver "linux-2.6.28.4/drivers/pci/probe.c:664", but it is not used by x86 arch.

660 /*
661 * Read interrupt line and base address registers.
662 * The architecture-dependent code can tweak these, of course.
663 */
664 static void pci_read_irq(struct pci_dev *dev)
665 {
666 unsigned char irq;
667
668 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
669 dev->pin = irq;
670 if (irq)
671 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
672 dev->irq = irq;
673 }


- Jiuyue


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5190
-----------------------------------------------------------
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 18, 2014, 1:42 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-07-16 10:01:05 UTC
Permalink
Post by Andreas Hansson via gem5-dev
Post by Andreas Sandberg via gem5-dev
Could you split this into two (or potentially three) different patches?
The PCI/ISA bus ID fixes look fine and should definitely go upstream ASAP. As far as I'm concerned that particular part of the patch can be submitted separately right away as it is a small bug fixes that is limited to a few lines.
I'm not so sure about the bridge ranges though. The PCI specification seems to allow devices to be mapped to pretty much any region of the memory space, so we can probably not do what you're doing currently to determine the range. Unfortunately, I can't think of a good solution off the top of my head. I'll discuss it with some colleagues and get back to you.
Split into three patches may be better:
1) PCI/ISA bus ID fixes
2) add/connect ethernet device
3) bridge range fixes
I will do this split latter tomorrow.

About the bridge range, I have tried to modify recvRangeChange() interface of Bridge: change bridge's slave port range when its master side changed.
I think this should be a better solution than current one. But I failed to deal with the address conflict of mem_ctrls and iobridge/iocache in membus. T_T


- Jiuyue


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5190
-----------------------------------------------------------
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated June 18, 2014, 1:42 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system. To make it work properly,
- add [mem_size-1(or 3GB for >4GB memory), 0xFFFFFFFF] to bridge's ranges for kernel configured pci device memory,
access to pci address space will pass though membus to bridge
- add IGbE_e1000 to x86_sys.pc.ethernet
- connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus
- swap bus_id of ISA/PCI in X86 IntelMPTable
In gem5 Pc::calcPciConfigAddr(), it required "assert(bus==0)", but linux kernel cannot
config ethernet device connected to ISA bus, so we swap bus_id of ISA/PCI
Diffs
-----
configs/common/FSConfig.py b2850bdcec070052f3a0f5efa8bf748eca1f5d44
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Andreas Sandberg via gem5-dev
2014-07-16 13:15:40 UTC
Permalink
Post by Jiuyue Ma via gem5-dev
Post by Andreas Sandberg via gem5-dev
Could you split this into two (or potentially three) different patches?
The PCI/ISA bus ID fixes look fine and should definitely go upstream ASAP. As far as I'm concerned that particular part of the patch can be submitted separately right away as it is a small bug fixes that is limited to a few lines.
I'm not so sure about the bridge ranges though. The PCI specification seems to allow devices to be mapped to pretty much any region of the memory space, so we can probably not do what you're doing currently to determine the range. Unfortunately, I can't think of a good solution off the top of my head. I'll discuss it with some colleagues and get back to you.
1) PCI/ISA bus ID fixes
2) add/connect ethernet device
3) bridge range fixes
I will do this split latter tomorrow.
Thank you! That's a good split.
Post by Jiuyue Ma via gem5-dev
About the bridge range, I have tried to modify recvRangeChange() interface of Bridge: change bridge's slave port range when its master side changed.
I think this should be a better solution than current one. But I failed to deal with the address conflict of mem_ctrls and iobridge/iocache in membus. T_T
I've discussed this with a couple of colleagues and it is not obvious
how to sort out the bridge issue. I think the bridge used to
automatically discover which device ranges were connected and magically
just work (in most cases), but this could get pretty hairy in the
general case depending on bus topology.

I checked how Linux handles address assignments (see e820.c somewhere in
arch/x86/) and it simply looks for a big hole (don't remember the
minimum size) in the memory map below 4GB. In practice, this finds the
hole that starts at around 3GB on most PCs. We could exploit this
behaviour to force IO devices to be mapped in a specific range (gem5
seems to assume 0xC0000000-0xFFFFFFFF for devices). That would require
the following changes:

* Statically bridge 0xC0000000-0xFFFF0000 to the IO bus. (The upper
64kB are reserved for m5ops.)
* Make sure that no E820 entry covers the IO range. (There isn't a
separate device entry type.)
* If RAM is less than 3GB reserve anything between the end of ram and
3GB. (I.e., everything below 3GB is covered by the E820 map and is
either ram or reserved.)


I think the above would be the simplest solution for now since it
doesn't involve mucking around with the bridge and it should "just work".

//Andreas


-- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2557590
ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2548782
Jiuyue Ma via gem5-dev
2014-07-17 04:35:51 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------

(Updated July 17, 2014, 4:35 a.m.)


Review request for Default.


Changes
-------

Remove comment for InterruptLine assign.
Split into three patches:
- 2314: PCI/ISA bus ID fixes
- 2315: bridge range fixes
- 2310(this one): add/connect ethernet device


Repository: gem5


Description (updated)
-------

config: add ethernet support for x86 fullsystem

This patch add a IGbE_e1000 ethernet device to x86 fs system.


Diffs (updated)
-----

configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1

Diff: http://reviews.gem5.org/r/2301/diff/


Testing
-------


Thanks,

Jiuyue Ma
Andreas Sandberg via gem5-dev
2014-07-17 09:35:05 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5200
-----------------------------------------------------------


I'm sorry I didn't spot this earlier, but it seems like you forgot to include the ethernet device's interrupt in the MP table. See the interrupt declaration for pci_dev4_inta for an example. Without that entry, Linux won't be able to setup interrupt routing properly.

- Andreas Sandberg
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 17, 2014, 5:35 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-07-17 09:55:17 UTC
Permalink
Post by Andreas Hansson via gem5-dev
Post by Andreas Sandberg via gem5-dev
I'm sorry I didn't spot this earlier, but it seems like you forgot to include the ethernet device's interrupt in the MP table. See the interrupt declaration for pci_dev4_inta for an example. Without that entry, Linux won't be able to setup interrupt routing properly.
We don't need anything in MP table, kernel can configure PCI device's interrupt itself :)
Maybe only ISA device need a MP table entry?

After apply 2314/2315/2310 and 2300(needed by 2.6.28.4; 2.6.22.9 did not care this),
I can boot system and discover&configure ethernet device successfully.

----------------------- boot log ----------------------------
Intel(R) PRO/1000 Network Driver - version 7.3.20-k2Copyright (c) 1999-2006 Intel Corporation.
PCI: Enabling device 0000:00:02.0 (0000 -> 0002)
e1000: 0000:00:02.0: e1000_probe: (PCI:33MHz:32-bit) 00:90:00:00:00:01
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection

----------------------- config ----------------------------
loading script...
Script from M5 readfile is empty, starting bash shell...
(none) / # ifconfig eth0 192.168.0.1
ADDRCONF(NETDEV_UP): eth0: link is not ready
(none) / # e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
ifconfig lo 127.0.0.1
(none) / # ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.008 ms

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.008/0.008/0.008/0.000 ms


- Jiuyue


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5200
-----------------------------------------------------------
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 17, 2014, 4:35 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Andreas Sandberg via gem5-dev
2014-07-17 10:25:49 UTC
Permalink
Post by Jiuyue Ma via gem5-dev
Post by Andreas Sandberg via gem5-dev
I'm sorry I didn't spot this earlier, but it seems like you forgot to include the ethernet device's interrupt in the MP table. See the interrupt declaration for pci_dev4_inta for an example. Without that entry, Linux won't be able to setup interrupt routing properly.
We don't need anything in MP table, kernel can configure PCI device's interrupt itself :)
Maybe only ISA device need a MP table entry?
After apply 2314/2315/2310 and 2300(needed by 2.6.28.4; 2.6.22.9 did not care this),
I can boot system and discover&configure ethernet device successfully.
----------------------- boot log ----------------------------
Intel(R) PRO/1000 Network Driver - version 7.3.20-k2Copyright (c) 1999-2006 Intel Corporation.
PCI: Enabling device 0000:00:02.0 (0000 -> 0002)
e1000: 0000:00:02.0: e1000_probe: (PCI:33MHz:32-bit) 00:90:00:00:00:01
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
----------------------- config ----------------------------
loading script...
Script from M5 readfile is empty, starting bash shell...
(none) / # ifconfig eth0 192.168.0.1
ADDRCONF(NETDEV_UP): eth0: link is not ready
(none) / # e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
ifconfig lo 127.0.0.1
(none) / # ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.008 ms
--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.008/0.008/0.008/0.000 ms
It probably depends on the kernel version. I tested with 3.4.94 and got a warning that the MP table was broken because it didn't find the interrupt routing information for the ethernet device. I think the warning even stated that the kernel was unable to figure out the interrupt.


- Andreas


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5200
-----------------------------------------------------------
Post by Jiuyue Ma via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 17, 2014, 5:35 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-07-18 00:31:30 UTC
Permalink
Post by Jiuyue Ma via gem5-dev
Post by Andreas Sandberg via gem5-dev
I'm sorry I didn't spot this earlier, but it seems like you forgot to include the ethernet device's interrupt in the MP table. See the interrupt declaration for pci_dev4_inta for an example. Without that entry, Linux won't be able to setup interrupt routing properly.
We don't need anything in MP table, kernel can configure PCI device's interrupt itself :)
Maybe only ISA device need a MP table entry?
After apply 2314/2315/2310 and 2300(needed by 2.6.28.4; 2.6.22.9 did not care this),
I can boot system and discover&configure ethernet device successfully.
----------------------- boot log ----------------------------
Intel(R) PRO/1000 Network Driver - version 7.3.20-k2Copyright (c) 1999-2006 Intel Corporation.
PCI: Enabling device 0000:00:02.0 (0000 -> 0002)
e1000: 0000:00:02.0: e1000_probe: (PCI:33MHz:32-bit) 00:90:00:00:00:01
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
----------------------- config ----------------------------
loading script...
Script from M5 readfile is empty, starting bash shell...
(none) / # ifconfig eth0 192.168.0.1
ADDRCONF(NETDEV_UP): eth0: link is not ready
(none) / # e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
ifconfig lo 127.0.0.1
(none) / # ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.008 ms
--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.008/0.008/0.008/0.000 ms
It probably depends on the kernel version. I tested with 3.4.94 and got a warning that the MP table was broken because it didn't find the interrupt routing information for the ethernet device. I think the warning even stated that the kernel was unable to figure out the interrupt.
fixed :)


- Jiuyue


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5200
-----------------------------------------------------------
Post by Jiuyue Ma via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 18, 2014, 12:29 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config, x86: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system, it does
1) add IGbE_e1000 to x86_sys.pc.ethernet,
2) connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus,
3) add interrupt assignment for x86_sys.pc.ethernet in MP table.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-07-17 10:04:46 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5206
-----------------------------------------------------------


There is still something to do with x86 ethernet support:
When using atomic mode, self-ping never get any output after a single line of output;
simple-timing mode will get 2-lines of output.
I can not figure out what happened. Maybe someone can help to solve this problem.

- Jiuyue Ma
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 17, 2014, 4:35 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Jiuyue Ma via gem5-dev
2014-07-18 00:29:57 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------

(Updated July 18, 2014, 12:29 a.m.)


Review request for Default.


Changes
-------

add interrupt assignment for ethernet in MP table
change summary line to "config, x86"


Summary (updated)
-----------------

config, x86: add ethernet support for x86 fullsystem


Repository: gem5


Description (updated)
-------

config, x86: add ethernet support for x86 fullsystem

This patch add a IGbE_e1000 ethernet device to x86 fs system, it does
the followings:
1) add IGbE_e1000 to x86_sys.pc.ethernet,
2) connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus,
3) add interrupt assignment for x86_sys.pc.ethernet in MP table.


Diffs (updated)
-----

configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1

Diff: http://reviews.gem5.org/r/2301/diff/


Testing
-------


Thanks,

Jiuyue Ma
Andreas Sandberg via gem5-dev
2014-07-18 13:39:43 UTC
Permalink
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5213
-----------------------------------------------------------

Ship it!


LGTM. Thanks for fixing this!

- Andreas Sandberg
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 18, 2014, 1:29 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config, x86: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system, it does
1) add IGbE_e1000 to x86_sys.pc.ethernet,
2) connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus,
3) add interrupt assignment for x86_sys.pc.ethernet in MP table.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Mohammad Alian via gem5-dev
2014-09-02 16:12:10 UTC
Permalink
Post by Andreas Hansson via gem5-dev
Post by Andreas Sandberg via gem5-dev
LGTM. Thanks for fixing this!
Hi,
Have you ever tried to boot system or use Ethernet device with O3 cpu model? With O3 cpu I get this error:

gem5.opt: build/X86/dev/i8254xGBe.cc:182: virtual Tick IGbE::read(PacketPtr): Assertion `pkt->getSize() == 4' failed.
Program aborted at tick 131516086224500
Aborted

The problem is that 'pkt-getSize()' returns 64 with O3 cpu model ...
Any idea how to fix it?

Thanks,
Mohammad


- Mohammad


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2301/#review5213
-----------------------------------------------------------
Post by Andreas Hansson via gem5-dev
-----------------------------------------------------------
http://reviews.gem5.org/r/2301/
-----------------------------------------------------------
(Updated July 18, 2014, 12:29 a.m.)
Review request for Default.
Repository: gem5
Description
-------
config, x86: add ethernet support for x86 fullsystem
This patch add a IGbE_e1000 ethernet device to x86 fs system, it does
1) add IGbE_e1000 to x86_sys.pc.ethernet,
2) connect x86_sys.pc.ethernet.pio/config/dma to x86_sys.iobus,
3) add interrupt assignment for x86_sys.pc.ethernet in MP table.
Diffs
-----
configs/common/FSConfig.py 878f2f30b12d38f619b80b5d80d52498946f6ad1
Diff: http://reviews.gem5.org/r/2301/diff/
Testing
-------
Thanks,
Jiuyue Ma
Loading...