mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
tis: fix tpm_tis_remove()
tpm_tis_remove() leads to calling tpm_tis_ready() with the IO region unmapped and chip->locality == -1 (locality released). This leads to a crash in mmio_write_bytes(). The patch implements these changes: tpm_tis_remove(): Unmap the IO region after calling tpm_tis_cleanup(). tpm_tis_cleanup(): Request locality before IO output and releasing locality. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
ade37460a9
commit
c3de051c41
2 changed files with 10 additions and 1 deletions
|
@ -378,8 +378,14 @@ out:
|
|||
int tpm_tis_cleanup(struct udevice *dev)
|
||||
{
|
||||
struct tpm_chip *chip = dev_get_priv(dev);
|
||||
int ret;
|
||||
|
||||
ret = tpm_tis_request_locality(dev, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
tpm_tis_ready(dev);
|
||||
|
||||
tpm_tis_release_locality(dev, chip->locality);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -118,10 +118,13 @@ iounmap:
|
|||
static int tpm_tis_remove(struct udevice *dev)
|
||||
{
|
||||
struct tpm_tis_chip_data *drv_data = (void *)dev_get_driver_data(dev);
|
||||
int ret;
|
||||
|
||||
ret = tpm_tis_cleanup(dev);
|
||||
|
||||
iounmap(drv_data->iobase);
|
||||
|
||||
return tpm_tis_cleanup(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct tpm_ops tpm_tis_ops = {
|
||||
|
|
Loading…
Reference in a new issue