[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-18 Thread Jianbo Liu
On 18 September 2016 at 15:22, Jan Viktorin  wrote:
> On Sun, 18 Sep 2016 13:58:50 +0800
> Jianbo Liu  wrote:
>
>> On 9 September 2016 at 16:43, Shreyansh Jain  
>> wrote:
>> > Introduction:
>> > =
>> >
>> > This patch set is direct derivative of Jan's original series [1],[2].
>> >
>> >  - As this deviates substantially from original series, if need be I can
>> >post it as a separate patch rather than v2. Please suggest.
>> >  - Also, there are comments on original v1 ([4]) which are _not_
>> >incorporated in this series as they refer to section no more in new
>> >version.
>> >  - This v3 version is based on the rte_driver/device patchset v9 [10].
>> >That series introduced device structures (rte_driver/rte_device)
>> >generalizing devices into PCI, VDEV, XXX. For the purpose of this
>> >patchset, XXX=>SOC.
>
> [...]
>
>> >
>> > 5) Design considerations that are different from PCI:
>> >  - Each driver implements its own scan and match function. PCI uses the BDF
>> >format to read the device from sysfs, but this _may_not_ be a case for a
>> >SoC ethernet device.
>> >= This is an important change from initial proposal by Jan in [2]. 
>> > Unlike
>> >his attempt to use /sys/bus/platform, this patch relies on the PMD to
>>
>> It could be many redundant code if Each PMD driver has the scan
>> function if its own.
>> I think Jan's implementation is common to many platform drivers.
>
> I personally can find a use case for having a custom scan function.
> However, we should at least provide a default implementation. Probably,
> both the scan and match functions should be used to _override_ a default
> behaviour. So, only drivers that require to scan devices in a specific
> way would provide a custom function for this.
>
And for each platform/product

> I agree, that this can sometimes lead to code duplication. Moreover, it
> opens door for a very non-standard, unsecure and wrong-by-design
> approaches. I'd like more to provide one or more scan implementations
> in EAL and do not put this responsibility on PMDs.
>
>>
>> >detect the devices. This is because SoC may require specific or
>> >additional info for device detection. Further, SoC may have embedded
>
> Can you provide an example for "additional info for device detection"?
>
>>
>> Can you give us more precise definition about SoC driver? Does it
>> include the driver in ARM server?
>
> I am sorry but I don't understand this question.
>
> What you mean by a "driver in ARM server"? Do you mean a kernel driver?
>
> There is no "SoC driver" in the text so what definition are asking for?
>
This patchset introduces rte_soc_driver, which is inheriting from rte_driver.
I want to know what devices can use this SoC driver/device framework.
Is it for the devices from ARM servers, or embedded systems of
different vendors?
And this framework is too generalized, if we don't try to understand
"soc" in rte_soc_driver, we can use it for PCI devices. :)

Thanks!
Jianbo


[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-18 Thread Jianbo Liu
On 9 September 2016 at 16:43, Shreyansh Jain  wrote:
> Introduction:
> =
>
> This patch set is direct derivative of Jan's original series [1],[2].
>
>  - As this deviates substantially from original series, if need be I can
>post it as a separate patch rather than v2. Please suggest.
>  - Also, there are comments on original v1 ([4]) which are _not_
>incorporated in this series as they refer to section no more in new
>version.
>  - This v3 version is based on the rte_driver/device patchset v9 [10].
>That series introduced device structures (rte_driver/rte_device)
>generalizing devices into PCI, VDEV, XXX. For the purpose of this
>patchset, XXX=>SOC.
>
> Aim:
> 
>
> As of now EAL is primarly focused on PCI initialization/probing.
>
>  rte_eal_init()
>   |- rte_eal_pci_init(): Find PCI devices from sysfs
>   |- ...
>   |- rte_eal_memzone_init()
>   |- ...
>   `- rte_eal_pci_probe(): Driver<=>Device initialization
>
> This patchset introduces SoC framework which would enable SoC drivers and
> drivers to be plugged into EAL, very similar to how PCI drivers/devices are
> done today.
>
> This is a stripped down version of PCI framework which allows the SoC PMDs
> to implement their own routines for detecting devices and linking devices to
> drivers.
>
> 1) Changes to EAL
>  rte_eal_init()
>   |- rte_eal_pci_init(): Find PCI devices from sysfs
>   |- rte_eal_soc_init(): Calls PMDs->scan_fn
>   |- ...
>   |- rte_eal_memzone_init()
>   |- ...
>   |- rte_eal_pci_probe(): Driver<=>Device initialization, PMD->devinit()
>   `- rte_eal_soc_probe(): Calls PMDs->match_fn and PMDs->devinit();
>
> 2) New device/driver structures:
>   - rte_soc_driver (inheriting rte_driver)
>   - rte_soc_device (inheriting rte_device)
>   - rte_eth_dev and eth_driver embedded rte_soc_device and rte_soc_driver,
> respectively.
>
> 3) The SoC PMDs need to:
>  - define rte_soc_driver with necessary scan and match callbacks
>  - Register themselves using DRIVER_REGISTER_SOC()
>  - Implement respective bus scanning in the scan callbacks to add necessary
>devices to SoC device list
>  - Implement necessary eth_dev_init/uninint for ethernet instances
>
> 4) Design considerations that are same as PCI:
>  - SoC initialization is being done through rte_eal_init(), just after PCI
>initialization is done.
>  - As in case of PCI, probe is done after rte_eal_pci_probe() to link the
>devices detected with the drivers registered.
>  - Device attach/detach functions are available and have been designed on
>the lines of PCI framework.
>  - PMDs register using DRIVER_REGISTER_SOC, very similar to
>DRIVER_REGISTER_PCI for PCI devices.
>  - Linked list of SoC driver and devices exists independent of the other
>driver/device list, but inheriting rte_driver/rte_driver, these are also
>part of a global list.
>
> 5) Design considerations that are different from PCI:
>  - Each driver implements its own scan and match function. PCI uses the BDF
>format to read the device from sysfs, but this _may_not_ be a case for a
>SoC ethernet device.
>= This is an important change from initial proposal by Jan in [2]. Unlike
>his attempt to use /sys/bus/platform, this patch relies on the PMD to

It could be many redundant code if Each PMD driver has the scan
function if its own.
I think Jan's implementation is common to many platform drivers.

>detect the devices. This is because SoC may require specific or
>additional info for device detection. Further, SoC may have embedded

Can you give us more precise definition about SoC driver? Does it
include the driver in ARM server?

>devices/MACs which require initialization which cannot be covered through
>sysfs parsing.

I think it can be done in devinit, not in scan function. devinit can
be different for each driver.

>= PCI based PMDs rely on EAL's capability to detect devices. This
>proposal puts the onus on PMD to detect devices, add to soc_device_list
>and wait for Probe. Matching, of device<=>driver is again PMD's callback.
>


[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-18 Thread Jan Viktorin
On Sun, 18 Sep 2016 09:41:55 +
Hemant Agrawal  wrote:

> > -Original Message-
> > From: Jan Viktorin [mailto:viktorin at rehivetech.com]  
> 

[...]

> > > And for each platform/product
> > >  
> > > > I agree, that this can sometimes lead to code duplication. Moreover,
> > > > it opens door for a very non-standard, unsecure and wrong-by-design
> > > > approaches. I'd like more to provide one or more scan
> > > > implementations in EAL and do not put this responsibility on PMDs.  
> 

Hi Hemant.

>  [Hemant]  A common/default scan function can be added, provided at least one 
> or more  PMD driver support it. 
> w.r.t Jan's original scan function, it was not suitable for any of the NXP 
> SoC's whether ARM or PowerPC.
> 
> Unable to validate the Jan's scan function on a real platform, we have 
> skipped it for next phase.  
> Addition of a default scan function can only be done in next phase, when we 
> find a suitable SoC PMD driver supporting it.

Quite frankly, the situation is same for me. I still have no clue about
your approach which seems to be pretty non-standard. I have no way how
to test it.

My approach can be tested on any Linux machine with platform devices
and device-tree enabled. You would see that I detect those devices (I
don't mean any certain network device, I mean all platform devices) and
if you provide a driver with a proper compatible string it will be set
for you.

I presume that I don't have any upstreamable PMD for this at the moment.


[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-18 Thread Jan Viktorin
On Sun, 18 Sep 2016 16:56:54 +0800
Jianbo Liu  wrote:

> On 18 September 2016 at 15:22, Jan Viktorin  
> wrote:
> > On Sun, 18 Sep 2016 13:58:50 +0800
> > Jianbo Liu  wrote:
> >  
> >> On 9 September 2016 at 16:43, Shreyansh Jain  
> >> wrote:  
> >> > Introduction:
> >> > =
> >> >
> >> > This patch set is direct derivative of Jan's original series [1],[2].
> >> >
> >> >  - As this deviates substantially from original series, if need be I can
> >> >post it as a separate patch rather than v2. Please suggest.
> >> >  - Also, there are comments on original v1 ([4]) which are _not_
> >> >incorporated in this series as they refer to section no more in new
> >> >version.
> >> >  - This v3 version is based on the rte_driver/device patchset v9 [10].
> >> >That series introduced device structures (rte_driver/rte_device)
> >> >generalizing devices into PCI, VDEV, XXX. For the purpose of this
> >> >patchset, XXX=>SOC.  
> >
> > [...]
> >  
> >> >
> >> > 5) Design considerations that are different from PCI:
> >> >  - Each driver implements its own scan and match function. PCI uses the 
> >> > BDF
> >> >format to read the device from sysfs, but this _may_not_ be a case 
> >> > for a
> >> >SoC ethernet device.
> >> >= This is an important change from initial proposal by Jan in [2]. 
> >> > Unlike
> >> >his attempt to use /sys/bus/platform, this patch relies on the PMD to 
> >> >  
> >>
> >> It could be many redundant code if Each PMD driver has the scan
> >> function if its own.
> >> I think Jan's implementation is common to many platform drivers.  
> >
> > I personally can find a use case for having a custom scan function.
> > However, we should at least provide a default implementation. Probably,
> > both the scan and match functions should be used to _override_ a default
> > behaviour. So, only drivers that require to scan devices in a specific
> > way would provide a custom function for this.
> >  
> And for each platform/product
> 
> > I agree, that this can sometimes lead to code duplication. Moreover, it
> > opens door for a very non-standard, unsecure and wrong-by-design
> > approaches. I'd like more to provide one or more scan implementations
> > in EAL and do not put this responsibility on PMDs.
> >  
> >>  
> >> >detect the devices. This is because SoC may require specific or
> >> >additional info for device detection. Further, SoC may have embedded  
> >
> > Can you provide an example for "additional info for device detection"?
> >  
> >>
> >> Can you give us more precise definition about SoC driver? Does it
> >> include the driver in ARM server?  
> >
> > I am sorry but I don't understand this question.
> >
> > What you mean by a "driver in ARM server"? Do you mean a kernel driver?
> >
> > There is no "SoC driver" in the text so what definition are asking for?
> >  
> This patchset introduces rte_soc_driver, which is inheriting from rte_driver.
> I want to know what devices can use this SoC driver/device framework.
> Is it for the devices from ARM servers, or embedded systems of
> different vendors?

First, this is not an ARM-specific feature. Consider any MAC connected to
the processor via some on-chip bus. In the world of ARM, it is usually
a kind of AMBA bus. I think, the Intel Xeon with FPGA would be a
good non-ARM example. Here they provide the Quick Path bus (but I don't
know the details). So, you cannot access such device as PCI. It is
usually not possible to distinguish the bus type easily (Linux calls
this a platform device).

So, an rte_soc_device denotes a device integrated on the chip
(SoC, System-on-Chip). Such devices can have a lower access latency
because they are closer to the processor.

So, if you have a server system driver by a SoC with integrated MACs
(no PCI-E involved), there is no way how to access them from DPDK. An
rte_soc_device represents such devices and provides a way how to access
them from DPDK. That is the goal...

You can have an embedded device (router, switch, monitoring device,
NAT, firewall, anything in a "small box" with high throughput demands)
that perfectly fits into this SoC framework because it would be usually
based on some SoC (ARM, ARM64, ...).

> And this framework is too generalized, if we don't try to understand
> "soc" in rte_soc_driver, we can use it for PCI devices. :)

No, you cannot use it for PCI devices, don't worry. There should be no
PCI facilities like access to BARs :). But, I think I got your point.

It seems to be generalized because there is no real standard in this
area. Any vendor of SoC can provide her custom on-chip bus. The
original idea was to build on top of the platform_device from Linux
which hides this information from you (unless there is some bus-specific
DMA which we must handle in the DPDK PMD).

We could provide an rte_amba_device instead but there is no advantage in
this. The amba bus is defined on the RTL level and not on the software
level (no BARs, no device 

[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-18 Thread Hemant Agrawal


> -Original Message-
> From: Jan Viktorin [mailto:viktorin at rehivetech.com]

> On Sun, 18 Sep 2016 16:56:54 +0800
> Jianbo Liu  wrote:
> 
> > On 18 September 2016 at 15:22, Jan Viktorin 
> wrote:
> > > On Sun, 18 Sep 2016 13:58:50 +0800
> > > Jianbo Liu  wrote:
> > >
> > >> On 9 September 2016 at 16:43, Shreyansh Jain 
> wrote:
> > >> > Introduction:
> > >> > =
> > >> >
> > >> > This patch set is direct derivative of Jan's original series [1],[2].
> > >> >
> > >> >  - As this deviates substantially from original series, if need be I 
> > >> > can
> > >> >post it as a separate patch rather than v2. Please suggest.
> > >> >  - Also, there are comments on original v1 ([4]) which are _not_
> > >> >incorporated in this series as they refer to section no more in new
> > >> >version.
> > >> >  - This v3 version is based on the rte_driver/device patchset v9 [10].
> > >> >That series introduced device structures (rte_driver/rte_device)
> > >> >generalizing devices into PCI, VDEV, XXX. For the purpose of this
> > >> >patchset, XXX=>SOC.
> > >
> > > [...]
> > >
> > >> >
> > >> > 5) Design considerations that are different from PCI:
> > >> >  - Each driver implements its own scan and match function. PCI uses the
> BDF
> > >> >format to read the device from sysfs, but this _may_not_ be a case 
> > >> > for a
> > >> >SoC ethernet device.
> > >> >= This is an important change from initial proposal by Jan in [2]. 
> > >> > Unlike
> > >> >his attempt to use /sys/bus/platform, this patch relies on the
> > >> > PMD to
> > >>
> > >> It could be many redundant code if Each PMD driver has the scan
> > >> function if its own.
> > >> I think Jan's implementation is common to many platform drivers.
> > >
> > > I personally can find a use case for having a custom scan function.
> > > However, we should at least provide a default implementation.
> > > Probably, both the scan and match functions should be used to
> > > _override_ a default behaviour. So, only drivers that require to
> > > scan devices in a specific way would provide a custom function for this.
> > >
> > And for each platform/product
> >
> > > I agree, that this can sometimes lead to code duplication. Moreover,
> > > it opens door for a very non-standard, unsecure and wrong-by-design
> > > approaches. I'd like more to provide one or more scan
> > > implementations in EAL and do not put this responsibility on PMDs.

 [Hemant]  A common/default scan function can be added, provided at least one 
or more  PMD driver support it. 
w.r.t Jan's original scan function, it was not suitable for any of the NXP 
SoC's whether ARM or PowerPC.

Unable to validate the Jan's scan function on a real platform, we have skipped 
it for next phase.  
Addition of a default scan function can only be done in next phase, when we 
find a suitable SoC PMD driver supporting it.
> > >
> > >>
> > >> >detect the devices. This is because SoC may require specific or
> > >> >additional info for device detection. Further, SoC may have
> > >> > embedded
> > >
> > > Can you provide an example for "additional info for device detection"?
> > >
> > >>
> > >> Can you give us more precise definition about SoC driver? Does it
> > >> include the driver in ARM server?
> > >
> > > I am sorry but I don't understand this question.
> > >
> > > What you mean by a "driver in ARM server"? Do you mean a kernel driver?
> > >
> > > There is no "SoC driver" in the text so what definition are asking for?
> > >
> > This patchset introduces rte_soc_driver, which is inheriting from 
> > rte_driver.
> > I want to know what devices can use this SoC driver/device framework.
> > Is it for the devices from ARM servers, or embedded systems of
> > different vendors?
> 
> First, this is not an ARM-specific feature. Consider any MAC connected to the
> processor via some on-chip bus. In the world of ARM, it is usually a kind of
> AMBA bus. I think, the Intel Xeon with FPGA would be a good non-ARM example.
> Here they provide the Quick Path bus (but I don't know the details). So, you
> cannot access such device as PCI. It is usually not possible to distinguish 
> the bus
> type easily (Linux calls this a platform device).
> 
> So, an rte_soc_device denotes a device integrated on the chip (SoC, System-on-
> Chip). Such devices can have a lower access latency because they are closer to
> the processor.
> 
> So, if you have a server system driver by a SoC with integrated MACs (no PCI-E
> involved), there is no way how to access them from DPDK. An rte_soc_device
> represents such devices and provides a way how to access them from DPDK.
> That is the goal...
> 
> You can have an embedded device (router, switch, monitoring device, NAT,
> firewall, anything in a "small box" with high throughput demands) that 
> perfectly
> fits into this SoC framework because it would be usually based on some SoC
> (ARM, ARM64, ...).
> 
> > And this framework is too generalized, if we 

[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-18 Thread Jan Viktorin
On Sun, 18 Sep 2016 13:58:50 +0800
Jianbo Liu  wrote:

> On 9 September 2016 at 16:43, Shreyansh Jain  
> wrote:
> > Introduction:
> > =
> >
> > This patch set is direct derivative of Jan's original series [1],[2].
> >
> >  - As this deviates substantially from original series, if need be I can
> >post it as a separate patch rather than v2. Please suggest.
> >  - Also, there are comments on original v1 ([4]) which are _not_
> >incorporated in this series as they refer to section no more in new
> >version.
> >  - This v3 version is based on the rte_driver/device patchset v9 [10].
> >That series introduced device structures (rte_driver/rte_device)
> >generalizing devices into PCI, VDEV, XXX. For the purpose of this
> >patchset, XXX=>SOC.

[...]

> >
> > 5) Design considerations that are different from PCI:
> >  - Each driver implements its own scan and match function. PCI uses the BDF
> >format to read the device from sysfs, but this _may_not_ be a case for a
> >SoC ethernet device.
> >= This is an important change from initial proposal by Jan in [2]. Unlike
> >his attempt to use /sys/bus/platform, this patch relies on the PMD to  
> 
> It could be many redundant code if Each PMD driver has the scan
> function if its own.
> I think Jan's implementation is common to many platform drivers.

I personally can find a use case for having a custom scan function.
However, we should at least provide a default implementation. Probably,
both the scan and match functions should be used to _override_ a default
behaviour. So, only drivers that require to scan devices in a specific
way would provide a custom function for this.

I agree, that this can sometimes lead to code duplication. Moreover, it
opens door for a very non-standard, unsecure and wrong-by-design
approaches. I'd like more to provide one or more scan implementations
in EAL and do not put this responsibility on PMDs.

> 
> >detect the devices. This is because SoC may require specific or
> >additional info for device detection. Further, SoC may have embedded  

Can you provide an example for "additional info for device detection"?

> 
> Can you give us more precise definition about SoC driver? Does it
> include the driver in ARM server?

I am sorry but I don't understand this question.

What you mean by a "driver in ARM server"? Do you mean a kernel driver?

There is no "SoC driver" in the text so what definition are asking for?

> 
> >devices/MACs which require initialization which cannot be covered through
> >sysfs parsing.  

I think, the description itself is incorrect.

If a device's initialization cannot be satisfied vie sysfs, it means
that you have to write a specific probe function. This is not related to
scan in any way.

However, there may be a group of devices which are not managed by the
standard platform_driver of the Linux Kernel (or other OS). In that
case, the custom scan function would be helpful. I can imagine a device
in a fully I/O coherent platform that only requires to access
the /dev/mem only (for the register space). It is unsecure but it would
work without any OS-driver. However, I consider it a corner case.
It can be useful for testing sometimes but not very helpful for
production.

We should however support mainly the standard devices which are always
represented by the OS. Otherwise, such system would introduce security
issues.

> 
> I think it can be done in devinit, not in scan function. devinit can
> be different for each driver.

+1

> 
> >= PCI based PMDs rely on EAL's capability to detect devices. This
> >proposal puts the onus on PMD to detect devices, add to soc_device_list
> >and wait for Probe. Matching, of device<=>driver is again PMD's callback.
> >  

Regards
Jan

-- 
  Jan ViktorinE-mail: Viktorin at RehiveTech.com
  System ArchitectWeb:www.RehiveTech.com
  RehiveTech
  Brno, Czech Republic


[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-16 Thread Shreyansh Jain
Hi David,

> -Original Message-
> From: Hunt, David [mailto:david.hunt at intel.com]
> Sent: Thursday, September 15, 2016 6:26 PM
> To: Shreyansh Jain ; dev at dpdk.org
> Cc: viktorin at rehivetech.com; Hemant Agrawal 
> Subject: Re: [dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver
> framework for EAL
> 
> Shreyansh, Jan, Hemant,
> 
> On 9/9/2016 9:43 AM, Shreyansh Jain wrote:
> > Introduction:
> > =
> >
> > This patch set is direct derivative of Jan's original series [1],[2].
> >
> >   - As this deviates substantially from original series, if need be I can
> > post it as a separate patch rather than v2. Please suggest.
> >   - Also, there are comments on original v1 ([4]) which are _not_
> > incorporated in this series as they refer to section no more in new
> > version.
> >   - This v3 version is based on the rte_driver/device patchset v9 [10].
> > That series introduced device structures (rte_driver/rte_device)
> > generalizing devices into PCI, VDEV, XXX. For the purpose of this
> > patchset, XXX=>SOC.
> >
> >
> ---snip---
> 
>  FYI, I've reviewed this patch set, and it looks to me like there's
> some very good work here. Each patch in the set builds nicely on the one
> before, and logically introduces the changes one by one.

Great. Thank you so much for reviewing this series. It would really help us 
move it ahead and introduce other series which are based on it.

> 
> I've no functional suggestions as the implementation looks clean,
> but I've one or two tiny suggestions on headers and error messages. I'll
> add a reply to the relevant patches in the set.

I will have a look at those and fix them soon (v4). 

> 
> Also, there's one or two issues thrown up by checkpatch, but I suspect
> they're false positives, as I'm using the 4.6 kernel version.

Thanks for headup - I will see/fix those in v4, if any. 


> 
> Regards,
> Dave
> 

-
Shreyansh



[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-15 Thread Hunt, David
Shreyansh, Jan, Hemant,

On 9/9/2016 9:43 AM, Shreyansh Jain wrote:
> Introduction:
> =
>
> This patch set is direct derivative of Jan's original series [1],[2].
>
>   - As this deviates substantially from original series, if need be I can
> post it as a separate patch rather than v2. Please suggest.
>   - Also, there are comments on original v1 ([4]) which are _not_
> incorporated in this series as they refer to section no more in new
> version.
>   - This v3 version is based on the rte_driver/device patchset v9 [10].
> That series introduced device structures (rte_driver/rte_device)
> generalizing devices into PCI, VDEV, XXX. For the purpose of this
> patchset, XXX=>SOC.
>
>
---snip---

 FYI, I've reviewed this patch set, and it looks to me like there's 
some very good work here. Each patch in the set builds nicely on the one 
before, and logically introduces the changes one by one.

I've no functional suggestions as the implementation looks clean, 
but I've one or two tiny suggestions on headers and error messages. I'll 
add a reply to the relevant patches in the set.

Also, there's one or two issues thrown up by checkpatch, but I suspect 
they're false positives, as I'm using the 4.6 kernel version.

Regards,
Dave




[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL

2016-09-09 Thread Shreyansh Jain
Introduction:
=

This patch set is direct derivative of Jan's original series [1],[2].

 - As this deviates substantially from original series, if need be I can 
   post it as a separate patch rather than v2. Please suggest.
 - Also, there are comments on original v1 ([4]) which are _not_
   incorporated in this series as they refer to section no more in new
   version.
 - This v3 version is based on the rte_driver/device patchset v9 [10].
   That series introduced device structures (rte_driver/rte_device)
   generalizing devices into PCI, VDEV, XXX. For the purpose of this
   patchset, XXX=>SOC.

Aim:


As of now EAL is primarly focused on PCI initialization/probing.

 rte_eal_init()
  |- rte_eal_pci_init(): Find PCI devices from sysfs
  |- ...
  |- rte_eal_memzone_init()
  |- ...
  `- rte_eal_pci_probe(): Driver<=>Device initialization

This patchset introduces SoC framework which would enable SoC drivers and
drivers to be plugged into EAL, very similar to how PCI drivers/devices are
done today.

This is a stripped down version of PCI framework which allows the SoC PMDs
to implement their own routines for detecting devices and linking devices to
drivers.

1) Changes to EAL 
 rte_eal_init()
  |- rte_eal_pci_init(): Find PCI devices from sysfs
  |- rte_eal_soc_init(): Calls PMDs->scan_fn
  |- ...
  |- rte_eal_memzone_init()
  |- ...
  |- rte_eal_pci_probe(): Driver<=>Device initialization, PMD->devinit()
  `- rte_eal_soc_probe(): Calls PMDs->match_fn and PMDs->devinit();

2) New device/driver structures:
  - rte_soc_driver (inheriting rte_driver)
  - rte_soc_device (inheriting rte_device)
  - rte_eth_dev and eth_driver embedded rte_soc_device and rte_soc_driver,
respectively.

3) The SoC PMDs need to:
 - define rte_soc_driver with necessary scan and match callbacks
 - Register themselves using DRIVER_REGISTER_SOC()
 - Implement respective bus scanning in the scan callbacks to add necessary
   devices to SoC device list
 - Implement necessary eth_dev_init/uninint for ethernet instances

4) Design considerations that are same as PCI:
 - SoC initialization is being done through rte_eal_init(), just after PCI 
   initialization is done.
 - As in case of PCI, probe is done after rte_eal_pci_probe() to link the 
   devices detected with the drivers registered.
 - Device attach/detach functions are available and have been designed on 
   the lines of PCI framework.
 - PMDs register using DRIVER_REGISTER_SOC, very similar to 
   DRIVER_REGISTER_PCI for PCI devices.
 - Linked list of SoC driver and devices exists independent of the other 
   driver/device list, but inheriting rte_driver/rte_driver, these are also 
   part of a global list.

5) Design considerations that are different from PCI:
 - Each driver implements its own scan and match function. PCI uses the BDF 
   format to read the device from sysfs, but this _may_not_ be a case for a 
   SoC ethernet device.
   = This is an important change from initial proposal by Jan in [2]. Unlike 
   his attempt to use /sys/bus/platform, this patch relies on the PMD to
   detect the devices. This is because SoC may require specific or
   additional info for device detection. Further, SoC may have embedded
   devices/MACs which require initialization which cannot be covered through
   sysfs parsing.
   = PCI based PMDs rely on EAL's capability to detect devices. This 
   proposal puts the onus on PMD to detect devices, add to soc_device_list 
   and wait for Probe. Matching, of device<=>driver is again PMD's callback.

Patchset Overview:
==
 - Patches 0001~0003 introduce the base infrastructure and test case
 - Patch 0004 is for command line support for no-soc, on lines of no-pci
 - Patch 0005 enables EAL to handle SoC type devices
 - Patch 0006 adds support for scan and probe callbacks and updates the test
   framework with relevant test case.
 - Patch 0007~0009 enable device argument, driver specific flags and
   interrupt handling related basic infra. Subsequent patches build up on
   them.
 - Patch 0010~0013 makes changes to PCI as well as ethdev code to remove 
   assumption that eth_driver is a PCI driver.
 - Patch 0014 adds necessary ethdev probe/remove functions for PMDs to use
 - Patch 0015 adds support for SoC driver/devices, along with probe/remove
   functions for Cryptodev devices.

Future/Pending Changes:
===
- Device whitelisting/blacklist still relies on command line '-b' and '-c'
  which are internally implemented using OPT_PCI_BLACKLIST/OPT_PCI_WHITELIST.
  This needs to be changed to a generic form - OPT_DEV_*LIST - probably.
- No cryptodriver currently uses SoC framework - probably a example driver
  can be created to demonstrate usage.

 [1] http://dpdk.org/ml/archives/dev/2016-January/030915.html
 [2] http://www.dpdk.org/ml/archives/dev/2016-May/038486.html
 [3] http://dpdk.org/ml/archives/dev/2016-August/045707.html
 [4] http://dpdk.org/ml/archives/dev/2016-May/038948.html
 [5]