From: Tzung-Bi Shih <tzungbi@kernel.org>
To: Michal Gorlas <michal.gorlas@9elements.com>
Cc: Brian Norris <briannorris@chromium.org>,
Julius Werner <jwerner@chromium.org>,
linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev,
Marcello Sylvester Bauer <marcello.bauer@9elements.com>
Subject: Re: [PATCH v2 2/3] firmware: coreboot: loader for Linux-owned SMI handler
Date: Wed, 25 Jun 2025 05:58:54 +0000 [thread overview]
Message-ID: <aFuQHqSd9kT87tsF@google.com> (raw)
In-Reply-To: <20250616-coreboot-payload-mm-v2-2-5d679b682e13@9elements.com>
On Mon, Jun 16, 2025 at 04:01:13PM +0200, Michal Gorlas wrote:
> Places a blob with Linux-owned SMI handler in the lower 4GB of memory, calculates
> entry points for the it and triggers SMI to coreboot's SMI handler
^^^
s/the//?
s/Places/Place/;s/calculates/calculate/;s/triggers/trigger/.
> informing it where to look for Linux-owned SMI handler.
How about repharse the message to something like:
Load Linux-owned SMI handler:
- Place Linux-owned SMI handler in ...
- Inform coreboot the location of Linux-owned SMI handler via SMI ...
On success, the Linux-owned SMI handler takes over all upcoming SMIs.
> diff --git a/drivers/firmware/google/Makefile b/drivers/firmware/google/Makefile
> [...]
> +
> +# LinuxBootSMM related.
> +payload-mm-$(CONFIG_COREBOOT_PAYLOAD_MM) := mm_loader.o mm_blob.o
> +
> +subdir- := mm_handler
subdir-$(CONFIG_COREBOOT_PAYLOAD_MM)?
> +obj-$(CONFIG_COREBOOT_PAYLOAD_MM) += payload-mm.o
> +
> +$(obj)/mm_blob.o: $(obj)/mm_handler/handler.bin
> +
> +$(obj)/mm_handler/handler.bin: FORCE
> + $(Q)$(MAKE) $(build)=$(obj)/mm_handler $@
mm_handler/ isn't visible to this patch. Separate them into the following
patch of series?
> diff --git a/drivers/firmware/google/mm_blob.S b/drivers/firmware/google/mm_blob.S
> [...]
> +SYM_DATA_START(mm_blob)
> + .incbin "drivers/firmware/google/mm_handler/handler.bin"
> +SYM_DATA_END_LABEL(mm_blob, SYM_L_GLOBAL, mm_blob_end)
> +
> +SYM_DATA_START(mm_relocs)
> + .incbin "drivers/firmware/google/mm_handler/handler.relocs"
> +SYM_DATA_END(mm_relocs)
mm_handler/ isn't visible to this patch. Separate them into the following
patch of series?
> diff --git a/drivers/firmware/google/mm_loader.c b/drivers/firmware/google/mm_loader.c
> [...]
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/cpu.h>
> +#include <linux/delay.h>
> +#include <linux/gfp.h>
> +#include <linux/mm.h>
> +#include <linux/slab.h>
> +#include <linux/device.h>
Please review again if it really needs to include the headers. Does it need
to include cpu.h, mm.h, and slab.h?
Also sort them alphabetically.
> +struct mm_header *mm_header;
> +static void *shared_buffer;
> +static size_t blob_size;
> +static struct lb_pld_mm_interface_info *mm_cbtable_info;
> +struct mm_info *mm_info;
No. Please allocate a driver specific struct and access it via
dev_set_drvdata() and dev_get_drvdata() if the context needs to be kept.
> +static int trigger_smi(u64 cmd, u64 arg, u64 retry)
> +{
> + u64 status;
> [...]
> +
> + if (status == cmd || status == PAYLOAD_MM_RET_FAILURE)
> + status = PAYLOAD_MM_RET_FAILURE;
> + else
> + status = PAYLOAD_MM_RET_SUCCESS;
No. Please use -errno in the kernel.
> +static int get_mm_info(struct coreboot_device *dev)
> +{
> + mm_cbtable_info = &dev->mm_info;
> + if (mm_cbtable_info->tag != LB_TAG_PLD_MM_INTERFACE_INFO)
> + return -ENXIO;
> +
> + mm_info = devm_kzalloc(&dev->dev, sizeof(*mm_info), GFP_KERNEL);
> + if (!mm_info)
> + return -ENOMEM;
> +
> + mm_info->revision = mm_cbtable_info->revision;
> + mm_info->requires_long_mode_call =
> + mm_cbtable_info->requires_long_mode_call;
> + mm_info->register_mm_entry_command =
> + mm_cbtable_info->register_mm_entry_command;
Does it really need to copy the data from `&dev->mm_info`?
> +static int mm_loader_probe(struct coreboot_device *dev)
> +{
> + if (get_mm_info(dev))
> + return -ENOMEM;
get_mm_info() isn't necessarily to be -ENOMEM. How about:
ret = get_mm_info(...);
if (ret)
return ret;
> +
> + u32 entry_point;
> +
> + entry_point = place_handler(&dev->dev);
> +
> + if (register_entry_point(&dev->dev, mm_info, entry_point)) {
> + dev_warn(&dev->dev, ": registering entry point for MM payload failed.\n");
> + return -1;
Please use -errno in the kernel. -ENOENT or -ENOTSUPP?
> + }
> +
> + /*
> + * Gives SMI some time in case it takes longer than expected.
> + * Only useful on real hardware (tested on RaptorLake), not needed on emulation.
> + */
> + mdelay(100);
This looks weird. Are there some ways for Linux to be aware of the SMI has
completed?
next prev parent reply other threads:[~2025-06-25 5:58 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-16 14:01 [PATCH v2 0/3] firmware: coreboot: Support for System Management Interrupt (SMI) handling in coreboot payload (MM payload concept) Michal Gorlas
2025-06-16 14:01 ` [PATCH v2 1/3] firmware: coreboot: support for parsing SMM related informations from coreboot tables Michal Gorlas
2025-06-25 5:58 ` Tzung-Bi Shih
2025-06-16 14:01 ` [PATCH v2 2/3] firmware: coreboot: loader for Linux-owned SMI handler Michal Gorlas
2025-06-25 5:58 ` Tzung-Bi Shih [this message]
2025-06-25 12:26 ` Michal Gorlas
2025-06-26 11:41 ` Michal Gorlas
2025-06-27 2:49 ` Tzung-Bi Shih
2025-06-27 11:40 ` Michal Gorlas
2025-06-27 2:33 ` Tzung-Bi Shih
2025-06-16 14:01 ` [PATCH v2 3/3] firmware: coreboot: Linux-owned SMI handler to be loaded by coreboot Michal Gorlas
2025-06-25 5:58 ` [PATCH v2 0/3] firmware: coreboot: Support for System Management Interrupt (SMI) handling in coreboot payload (MM payload concept) Tzung-Bi Shih
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aFuQHqSd9kT87tsF@google.com \
--to=tzungbi@kernel.org \
--cc=briannorris@chromium.org \
--cc=chrome-platform@lists.linux.dev \
--cc=jwerner@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcello.bauer@9elements.com \
--cc=michal.gorlas@9elements.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®