[dpdk-dev] [PATCH v3 00/15] Introduce SoC device/driver framework for EAL
Jianbo Liu
jianbo.liu at linaro.org
Sun Sep 18 07:58:50 CEST 2016
On 9 September 2016 at 16:43, Shreyansh Jain <shreyansh.jain at nxp.com> 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.
>
More information about the dev
mailing list