• Samuel Holland's avatar
    clk: sunxi-ng: Unregister clocks/resets when unbinding · 9bec2b9c
    Samuel Holland authored
    Currently, unbinding a CCU driver unmaps the device's MMIO region, while
    leaving its clocks/resets and their providers registered. This can cause
    a page fault later when some clock operation tries to perform MMIO. Fix
    this by separating the CCU initialization from the memory allocation,
    and then using a devres callback to unregister the clocks and resets.
    
    This also fixes a memory leak of the `struct ccu_reset`, and uses the
    correct owner (the specific platform driver) for the clocks and resets.
    
    Early OF clock providers are never unregistered, and limited error
    handling is possible, so they are mostly unchanged. The error reporting
    is made more consistent by moving the message inside of_sunxi_ccu_probe.
    Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
    Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
    Link: https://lore.kernel.org/r/20210901050526.45673-2-samuel@sholland.org
    9bec2b9c
ccu-sun8i-a33.c 26.1 KB