• Thinh Nguyen's avatar
    usb: dwc3: Add support for DWC_usb32 IP · 9af21dd6
    Thinh Nguyen authored
    Synopsys introduces a new controller DWC_usb32. It supports dual-lane
    and speed up to 20 Gbps, and the DWC3 driver will drive this controller.
    Currently the driver uses a single field dwc->revision to ID both
    DWC_usb3 and DWC_usb31 and their version number. This was sufficient for
    two IPs, but this method doesn't work with additional IPs. As a result,
    let's separate the dwc->revision field to 2 separate fields: ip and
    revision. The ip field now stores the ID of the controller's IP while
    the revision field stores the controller's version number.
    
    This new scheme enforces DWC3 to compare the revision within the same IP
    only. As a result, we must update all the revision check of the
    controller to check its corresponding IP.
    
    To help with this enforcement, we create a few macros to help with
    the common version checks:
    
    DWC3_IP_IS(IP)
    DWC3_VER_IS(IP, VERSION)
    DWC3_VER_IS_PRIOR(IP, VERSION)
    DWC3_VER_IS_WITHIN(IP, LOWER_VERSION, UPPER_VERSION)
    DWC3_VER_TYPE_IS_WITHIN(IP, VERSION,
    			LOWER_VERSION_TYPE,
    			UPPER_VERSION_TYPE)
    
    The DWC_usb32 controller operates using the same programming model and
    with very similar configurations as its previous controllers. Please
    note that the various IP and revision checks in this patch match the
    current checks for DWC_usb31 version 1.90a. Additional configurations
    that are unique to DWC_usb32 are applied separately.
    Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
    9af21dd6
core.c 45.6 KB