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. >