Unverified Commit 933edcde authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'tegra-for-5.20-firmware' of...

Merge tag 'tegra-for-5.20-firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into arm/drivers

firmware: tegra: Changes for v5.20-rc1

Contains a fix that avoids unaligned accesses to IPC memory, which in
turn helps in suppressing speculative reads from out-of-bounds memory.

Another patch performs some minor cleanup around debugfs API usage.

* tag 'tegra-for-5.20-firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux:
  firmware: tegra: Fix error check return value of debugfs_create_file()
  firmware: tegra: bpmp: Do only aligned access to IPC memory area

Link: https://lore.kernel.org/r/20220708185608.676474-3-thierry.reding@gmail.com


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents ff6c2269 afcdb8e5
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -474,7 +474,7 @@ static int bpmp_populate_debugfs_inband(struct tegra_bpmp *bpmp,
			mode |= attrs & DEBUGFS_S_IWUSR ? 0200 : 0;
			dentry = debugfs_create_file(name, mode, parent, bpmp,
						     &bpmp_debug_fops);
			if (!dentry) {
			if (IS_ERR(dentry)) {
				err = -ENOMEM;
				goto out;
			}
@@ -725,7 +725,7 @@ static int bpmp_populate_dir(struct tegra_bpmp *bpmp, struct seqbuf *seqbuf,

		if (t & DEBUGFS_S_ISDIR) {
			dentry = debugfs_create_dir(name, parent);
			if (!dentry)
			if (IS_ERR(dentry))
				return -ENOMEM;
			err = bpmp_populate_dir(bpmp, seqbuf, dentry, depth+1);
			if (err < 0)
@@ -738,7 +738,7 @@ static int bpmp_populate_dir(struct tegra_bpmp *bpmp, struct seqbuf *seqbuf,
			dentry = debugfs_create_file(name, mode,
						     parent, bpmp,
						     &debugfs_fops);
			if (!dentry)
			if (IS_ERR(dentry))
				return -ENOMEM;
		}
	}
@@ -788,11 +788,11 @@ int tegra_bpmp_init_debugfs(struct tegra_bpmp *bpmp)
		return 0;

	root = debugfs_create_dir("bpmp", NULL);
	if (!root)
	if (IS_ERR(root))
		return -ENOMEM;

	bpmp->debugfs_mirror = debugfs_create_dir("debug", root);
	if (!bpmp->debugfs_mirror) {
	if (IS_ERR(bpmp->debugfs_mirror)) {
		err = -ENOMEM;
		goto out;
	}
+3 −3
Original line number Diff line number Diff line
@@ -201,7 +201,7 @@ static ssize_t __tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel,
	int err;

	if (data && size > 0)
		memcpy(data, channel->ib->data, size);
		memcpy_fromio(data, channel->ib->data, size);

	err = tegra_bpmp_ack_response(channel);
	if (err < 0)
@@ -245,7 +245,7 @@ static ssize_t __tegra_bpmp_channel_write(struct tegra_bpmp_channel *channel,
	channel->ob->flags = flags;

	if (data && size > 0)
		memcpy(channel->ob->data, data, size);
		memcpy_toio(channel->ob->data, data, size);

	return tegra_bpmp_post_request(channel);
}
@@ -420,7 +420,7 @@ void tegra_bpmp_mrq_return(struct tegra_bpmp_channel *channel, int code,
	channel->ob->code = code;

	if (data && size > 0)
		memcpy(channel->ob->data, data, size);
		memcpy_toio(channel->ob->data, data, size);

	err = tegra_bpmp_post_response(channel);
	if (WARN_ON(err < 0))