• Marcin Wojtas's avatar
    net: mvpp2: enable ACPI support in the driver · a75edc7c
    Marcin Wojtas authored
    This patch introduces an alternative way of obtaining resources - via
    ACPI tables provided by firmware. Enabling coexistence with the DT
    support, in addition to the OF_*->device_*/fwnode_* API replacement,
    required following steps to be taken:
    
    * Add mvpp2_acpi_match table
    * Omit clock configuration and obtain tclk from the property - in ACPI
      world, the firmware is responsible for clock maintenance.
    * Disable comphy and syscon handling as they are not available for ACPI.
    * Modify way of obtaining interrupts - use newly introduced
      fwnode_irq_get() routine
    * Until proper MDIO bus and PHY handling with ACPI is established in the
      kernel, use only link interrupts feature in the driver. For the RGMII
      port it results in depending on GMAC settings done during firmware
      stage.
    * When booting with ACPI MVPP2_QDIST_MULTI_MODE is picked by
      default, as there is no need to keep any kind of the backward
      compatibility.
    
    Moreover, a memory region used by mvmdio driver is usually placed in
    the middle of the address space of the PP2 network controller.
    The MDIO base address is obtained without requesting memory region
    (by devm_ioremap() call) in mvmdio.c, later overlapping resources are
    requested by the network driver, which is responsible for avoiding
    a concurrent access.
    
    In case the MDIO memory region is declared in the ACPI, it can
    already appear as 'in-use' in the OS. Because it is overlapped by second
    region of the network controller, make sure it is released, before
    requesting it again. The care is taken by mvpp2 driver to avoid
    concurrent access to this memory region.
    Signed-off-by: default avatarMarcin Wojtas <mw@semihalf.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a75edc7c
mvpp2.c 236 KB