platform/chrome: chromeos_acpi: print hex string for ACPI_TYPE_BUFFER

`element->buffer.pointer` should be binary blob.  `%s` doesn't work
perfect for them.

Print hex string for ACPI_TYPE_BUFFER.  Also update the documentation
to reflect this.

Fixes: 0a4cad9c11 ("platform/chrome: Add ChromeOS ACPI device driver")
Cc: stable@vger.kernel.org
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20230803011245.3773756-1-tzungbi@kernel.org
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
This commit is contained in:
Tzung-Bi Shih 2023-08-03 09:12:45 +08:00
parent 703e77134e
commit 0820debb7d
2 changed files with 31 additions and 2 deletions

View File

@ -149,4 +149,4 @@ KernelVersion: 5.19
Description: Description:
Returns the verified boot data block shared between the Returns the verified boot data block shared between the
firmware verification step and the kernel verification step firmware verification step and the kernel verification step
(binary). (hex dump).

View File

@ -90,7 +90,36 @@ static int chromeos_acpi_handle_package(struct device *dev, union acpi_object *o
case ACPI_TYPE_STRING: case ACPI_TYPE_STRING:
return sysfs_emit(buf, "%s\n", element->string.pointer); return sysfs_emit(buf, "%s\n", element->string.pointer);
case ACPI_TYPE_BUFFER: case ACPI_TYPE_BUFFER:
return sysfs_emit(buf, "%s\n", element->buffer.pointer); {
int i, r, at, room_left;
const int byte_per_line = 16;
at = 0;
room_left = PAGE_SIZE - 1;
for (i = 0; i < element->buffer.length && room_left; i += byte_per_line) {
r = hex_dump_to_buffer(element->buffer.pointer + i,
element->buffer.length - i,
byte_per_line, 1, buf + at, room_left,
false);
if (r > room_left)
goto truncating;
at += r;
room_left -= r;
r = sysfs_emit_at(buf, at, "\n");
if (!r)
goto truncating;
at += r;
room_left -= r;
}
buf[at] = 0;
return at;
truncating:
dev_info_once(dev, "truncating sysfs content for %s\n", name);
sysfs_emit_at(buf, PAGE_SIZE - 4, "..\n");
return PAGE_SIZE - 1;
}
default: default:
dev_err(dev, "element type %d not supported\n", element->type); dev_err(dev, "element type %d not supported\n", element->type);
return -EINVAL; return -EINVAL;