• Serge Semin's avatar
    PCI: dwc: Introduce generic platform clocks and resets · ef69f852
    Serge Semin authored
    Currently almost each platform driver uses its own resets and clocks
    naming in order to get the corresponding descriptors. It makes the code
    harder to maintain and comprehend especially seeing the DWC PCIe core main
    resets and clocks signals set hasn't changed much for about at least one
    major IP-core release. So in order to organize things around these signals
    we suggest to create a generic interface for them in accordance with the
    naming introduced in the DWC PCIe IP-core reference manual:
    
    Application clocks:
    - "dbi"  - data bus interface clock (on some DWC PCIe platforms it's
               referred as "pclk", "pcie", "sys", "ahb", "cfg", "iface",
               "gio", "reg", "pcie_apb_sys");
    - "mstr" - AXI-bus master interface clock (some DWC PCIe glue drivers
               refer to this clock as "port", "bus", "pcie_bus",
               "bus_master/master_bus/axi_m", "pcie_aclk");
    - "slv"  - AXI-bus slave interface clock (also called as "port", "bus",
               "pcie_bus", "bus_slave/slave_bus/axi_s", "pcie_aclk",
               "pcie_inbound_axi").
    
    Core clocks:
    - "pipe" - core-PCS PIPE interface clock coming from external PHY (it's
               normally named by the platform drivers as just "pipe");
    - "core" - primary clock of the controller (none of the platform drivers
               declare such a clock but in accordance with the ref. manual
               the devices may have it separately specified);
    - "aux"  - auxiliary PMC domain clock (it is named by some platforms as
               "pcie_aux" and just "aux");
    - "ref"  - Generic reference clock (it is a generic clock source, which
               can be used as a signal source for multiple interfaces, some
               platforms call it as "ref", "general", "pcie_phy",
               "pcie_phy_ref").
    
    Application resets:
    - "dbi"  - Data-bus interface reset (it's CSR interface clock and is
               normally called as "apb" though technically it's not APB but
               DWC PCIe-specific interface);
    - "mstr" - AXI-bus master reset (some platforms call it as "port", "apps",
               "bus", "axi_m");
    - "slv"  - ABI-bus slave reset (some platforms call it as "port", "apps",
               "bus", "axi_s").
    
    Core resets:
    - "non-sticky" - non-sticky CSR flags reset;
    - "sticky"     - sticky CSR flags reset;
    - "pipe"       - PIPE-interface (Core-PCS) logic reset (some platforms
                     call it just "pipe");
    - "core"       - controller primary reset (resets everything except PMC
                     module, some platforms refer to this signal as "soft",
                     "pci");
    - "phy"        - PCS/PHY block reset (strictly speaking it is normally
                     connected to the input of an external block, but the
                     reference manual says it must be available for the PMC
                     working correctly, some existing platforms call it
                     "pciephy", "phy", "link");
    - "hot"        - PMC hot reset signal (also called as "sleep");
    - "pwr"        - cold reset signal (can be referred as "pwr", "turnoff").
    
    Bus reset:
    - "perst" - PCIe standard signal used to reset the PCIe peripheral
                devices.
    
    As you can see each platform uses it's own naming for basically the same
    set of the signals. In the framework of this commit we suggest to add a
    set of the clocks and reset signals resources, corresponding names and
    identifiers for each denoted entity. At current stage the platforms will
    be able to use the provided infrastructure to automatically request all
    these resources and manipulate with them in the Host/EP init callbacks.
    Alas it isn't that easy to create a common cold/hot reset procedure due to
    too many platform-specifics in the procedure, like the external flags
    exposure and the delays requirement.
    
    Link: https://lore.kernel.org/r/20221113191301.5526-20-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
    Signed-off-by: default avatarLorenzo Pieralisi <lpieralisi@kernel.org>
    ef69f852
pcie-designware.h 17.1 KB