Loading drivers/firmware/tegra/bpmp.c +16 −6 Original line number Diff line number Diff line Loading @@ -194,16 +194,24 @@ static int tegra_bpmp_wait_master_free(struct tegra_bpmp_channel *channel) } static ssize_t __tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel, void *data, size_t size) void *data, size_t size, int *ret) { int err; if (data && size > 0) memcpy(data, channel->ib->data, size); return tegra_ivc_read_advance(channel->ivc); err = tegra_ivc_read_advance(channel->ivc); if (err < 0) return err; *ret = channel->ib->code; return 0; } static ssize_t tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel, void *data, size_t size) void *data, size_t size, int *ret) { struct tegra_bpmp *bpmp = channel->bpmp; unsigned long flags; Loading @@ -217,7 +225,7 @@ static ssize_t tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel, } spin_lock_irqsave(&bpmp->lock, flags); err = __tegra_bpmp_channel_read(channel, data, size); err = __tegra_bpmp_channel_read(channel, data, size, ret); clear_bit(index, bpmp->threaded.allocated); spin_unlock_irqrestore(&bpmp->lock, flags); Loading Loading @@ -337,7 +345,8 @@ int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp, if (err < 0) return err; return __tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size); return __tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size, &msg->rx.ret); } EXPORT_SYMBOL_GPL(tegra_bpmp_transfer_atomic); Loading Loading @@ -371,7 +380,8 @@ int tegra_bpmp_transfer(struct tegra_bpmp *bpmp, if (err == 0) return -ETIMEDOUT; return tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size); return tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size, &msg->rx.ret); } EXPORT_SYMBOL_GPL(tegra_bpmp_transfer); Loading include/soc/tegra/bpmp.h +1 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,7 @@ struct tegra_bpmp_message { struct { void *data; size_t size; int ret; } rx; }; Loading Loading
drivers/firmware/tegra/bpmp.c +16 −6 Original line number Diff line number Diff line Loading @@ -194,16 +194,24 @@ static int tegra_bpmp_wait_master_free(struct tegra_bpmp_channel *channel) } static ssize_t __tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel, void *data, size_t size) void *data, size_t size, int *ret) { int err; if (data && size > 0) memcpy(data, channel->ib->data, size); return tegra_ivc_read_advance(channel->ivc); err = tegra_ivc_read_advance(channel->ivc); if (err < 0) return err; *ret = channel->ib->code; return 0; } static ssize_t tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel, void *data, size_t size) void *data, size_t size, int *ret) { struct tegra_bpmp *bpmp = channel->bpmp; unsigned long flags; Loading @@ -217,7 +225,7 @@ static ssize_t tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel, } spin_lock_irqsave(&bpmp->lock, flags); err = __tegra_bpmp_channel_read(channel, data, size); err = __tegra_bpmp_channel_read(channel, data, size, ret); clear_bit(index, bpmp->threaded.allocated); spin_unlock_irqrestore(&bpmp->lock, flags); Loading Loading @@ -337,7 +345,8 @@ int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp, if (err < 0) return err; return __tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size); return __tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size, &msg->rx.ret); } EXPORT_SYMBOL_GPL(tegra_bpmp_transfer_atomic); Loading Loading @@ -371,7 +380,8 @@ int tegra_bpmp_transfer(struct tegra_bpmp *bpmp, if (err == 0) return -ETIMEDOUT; return tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size); return tegra_bpmp_channel_read(channel, msg->rx.data, msg->rx.size, &msg->rx.ret); } EXPORT_SYMBOL_GPL(tegra_bpmp_transfer); Loading
include/soc/tegra/bpmp.h +1 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,7 @@ struct tegra_bpmp_message { struct { void *data; size_t size; int ret; } rx; }; Loading