• Rafael J. Wysocki's avatar
    PM / Domains: Allow generic PM domains to have multiple masters · 5063ce15
    Rafael J. Wysocki authored
    Currently, for a given generic PM domain there may be only one parent
    domain (i.e. a PM domain it depends on).  However, there is at least
    one real-life case in which there should be two parents (masters) for
    one PM domain (the A3RV domain on SH7372 turns out to depend on the
    A4LC domain and it depends on the A4R domain and the same time). For
    this reason, allow a PM domain to have multiple parents (masters) by
    introducing objects representing links between PM domains.
    
    The (logical) links between PM domains represent relationships in
    which one domain is a master (i.e. it is depended on) and another
    domain is a slave (i.e. it depends on the master) with the rule that
    the slave cannot be powered on if the master is not powered on and
    the master cannot be powered off if the slave is not powered off.
    Each struct generic_pm_domain object representing a PM domain has
    two lists of links, a list of links in which it is a master and
    a list of links in which it is a slave.  The first of these lists
    replaces the list of subdomains and the second one is used in place
    of the parent pointer.
    
    Each link is represented by struct gpd_link object containing
    pointers to the master and the slave and two struct list_head
    members allowing it to hook into two lists (the master's list
    of "master" links and the slave's list of "slave" links).  This
    allows the code to get to the link from each side (either from
    the master or from the slave) and follow it in each direction.
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    5063ce15
domain.c 33.1 KB