• S
    USB: EHCI: tegra: fix circular module dependencies · 91a687d8
    Stephen Warren 提交于
    The Tegra EHCI driver directly calls various functions in the Tegra USB
    PHY driver. The reverse is also true; the PHY driver calls into the EHCI
    driver. This is problematic when the two are built as modules.
    
    The calls from the PHY to EHCI driver were originally added in commit
    bbdabdb6 "usb: add APIs to access host registers from Tegra PHY", for the
    following reasons:
    
    1) The register being touched is an EHCI register, so logically only the
       EHCI driver should touch it.
    2) (1) implies that some locking may be needed to correctly implement the
       r/m/w access to this shared register.
    3) We were expecting to pass only the PHY register space to the Tegra PHY
       driver, and hence it would not have access to touch the shared
       registers.
    
    To solve this, that commit added functions in the EHCI driver to touch the
    shared register on behalf of the PHY driver.
    
    In practice, we ended up not having any locking in the implementaiton of
    those functions, and I've been led to believe this is safe. Equally, (3)
    did not happen either. Hence, it is possible for the PHY driver to touch
    the shared register directly.
    
    Given that, this patch moves the code to touch the shared register back
    into the PHY driver, to eliminate the module problems. If we actually
    need locking or co-ordination in the future, I propose we put the lock
    support into some pre-existing core module, or into a third separate
    module, in order to avoid the circular dependencies.
    
    I apologize for my contribution to code churn here.
    Signed-off-by: NStephen Warren <swarren@nvidia.com>
    Acked-by: NAlan Stern <stern@rowland.harvard.edu>
    Acked-by: NArnd Bergmann <arnd@arndb.de>
    Tested-by: NThierry Reding <thierry.reding@gmail.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    91a687d8
ehci-tegra.c 14.3 KB