[PATCH v3 31/35] acpi: Add support for DSDT generation

Simon Glass sjg at chromium.org
Tue Jul 7 21:12:31 CEST 2020


Hi Bin,

On Sun, 28 Jun 2020 at 23:39, Bin Meng <bmeng.cn at gmail.com> wrote:
>
> Hi Simon,
>
> On Sun, Jun 14, 2020 at 10:55 AM Simon Glass <sjg at chromium.org> wrote:
> >
> > Some devices need to inject extra code into the Differentiated System
> > Descriptor Table (DSDT). Add a method to handle this.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > Reviewed-by: Wolfgang Wallner <wolfgang.wallner at br-automation.com>
> > ---
> >
> > Changes in v3:
> > - Fix 'THe' typo
> > - Rename build_type() to sort_acpi_item_type()
> >
> > Changes in v1:
> > - Generalise the ACPI function recursion with acpi_recurse_method()
> >
> >  arch/sandbox/dts/test.dts |  2 ++
> >  drivers/core/acpi.c       | 25 +++++++++++++++++++++-
> >  include/dm/acpi.h         | 23 ++++++++++++++++++++
> >  test/dm/acpi.c            | 44 +++++++++++++++++++++++++++++++++++++++
> >  4 files changed, 93 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> > index 993082763d..caf935cfdf 100644
> > --- a/arch/sandbox/dts/test.dts
> > +++ b/arch/sandbox/dts/test.dts
> > @@ -257,6 +257,7 @@
> >         acpi_test1: acpi-test {
> >                 compatible = "denx,u-boot-acpi-test";
> >                 acpi-ssdt-test-data = "ab";
> > +               acpi-dsdt-test-data = "hi";
> >                 child {
> >                         compatible = "denx,u-boot-acpi-test";
> >                 };
> > @@ -265,6 +266,7 @@
> >         acpi_test2: acpi-test2 {
> >                 compatible = "denx,u-boot-acpi-test";
> >                 acpi-ssdt-test-data = "cd";
> > +               acpi-dsdt-test-data = "jk";
> >         };
> >
> >         clocks {
> > diff --git a/drivers/core/acpi.c b/drivers/core/acpi.c
> > index 4719a5c4e4..c1fc364550 100644
> > --- a/drivers/core/acpi.c
> > +++ b/drivers/core/acpi.c
> > @@ -22,12 +22,14 @@
> >  enum gen_type_t {
> >         TYPE_NONE,
> >         TYPE_SSDT,
> > +       TYPE_DSDT,
> >  };
> >
> >  /* Type of method to call */
> >  enum method_t {
> >         METHOD_WRITE_TABLES,
> >         METHOD_FILL_SSDT,
> > +       METHOD_INJECT_DSDT,
> >  };
> >
> >  /* Prototype for all methods */
> > @@ -144,7 +146,9 @@ static int sort_acpi_item_type(struct acpi_ctx *ctx, void *start,
> >         void *end = ctx->current;
> >
> >         ptr = start;
> > -       order = ofnode_read_chosen_prop("u-boot,acpi-ssdt-order", &size);
> > +       order = ofnode_read_chosen_prop(type == TYPE_DSDT ?
> > +                                       "u-boot,acpi-dsdt-order" :
> > +                                       "u-boot,acpi-ssdt-order", &size);
> >         if (!order) {
> >                 log_warning("Failed to find ordering, leaving as is\n");
> >                 return 0;
> > @@ -189,6 +193,8 @@ acpi_method acpi_get_method(struct udevice *dev, enum method_t method)
> >                         return aops->write_tables;
> >                 case METHOD_FILL_SSDT:
> >                         return aops->fill_ssdt;
> > +               case METHOD_INJECT_DSDT:
> > +                       return aops->inject_dsdt;
> >                 }
> >         }
> >
> > @@ -247,6 +253,23 @@ int acpi_fill_ssdt(struct acpi_ctx *ctx)
> >         return ret;
> >  }
> >
> > +int acpi_inject_dsdt(struct acpi_ctx *ctx)
>
> For naming consistency, this should be acpi_fill_dsdt(), or change the
> ssdt one to: acpi_inject_ssdt() otherwise.

This method injects contents into an existing DSDT, hence the naming.

It is also better I think, since SSDT and DSDT only differ by one
character and it is easy to get them confused otherwise.

Will update the comment.

Regards,
Simon


More information about the U-Boot mailing list