• Jon Hunter's avatar
    soc/tegra: pmc: Restore base address on probe failure · 0259f522
    Jon Hunter authored
    During early initialisation, the PMC registers are mapped and the PMC SoC
    data is populated in the PMC data structure. This allows other drivers
    access the PMC register space, via the public Tegra PMC APIs, prior to
    probing the PMC device.
    
    When the PMC device is probed, the PMC registers are mapped again and if
    successful the initial mapping is freed. If the probing of the PMC device
    fails after the registers are remapped, then the registers will be
    unmapped and hence the pointer to the PMC registers will be invalid. This
    could lead to a potential crash, because once the PMC SoC data pointer is
    populated, the driver assumes that the PMC register mapping is also valid
    and a user calling any of the public Tegra PMC APIs could trigger an
    exception because these APIs don't check that the mapping is still valid.
    
    Fix this by updating the mapping and freeing the original mapping only if
    probing the PMC device is successful.
    Signed-off-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    0259f522
pmc.c 27.6 KB