[PATCH v6 10/29] pci: Adjust dm_pci_read_bar32() to return errors correctly

At present if reading a BAR returns 0xffffffff then the value is masked and a different value is returned. This makes it harder to detect the problem when debugging.
Update the function to avoid masking in this case.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com ---
Changes in v6: - Rework commit message to avoid mention of missing device
Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: None
drivers/pci/pci-uclass.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 213381da6bd..7f46e901fb2 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -1213,7 +1213,14 @@ u32 dm_pci_read_bar32(const struct udevice *dev, int barnum)
bar = PCI_BASE_ADDRESS_0 + barnum * 4; dm_pci_read_config32(dev, bar, &addr); - if (addr & PCI_BASE_ADDRESS_SPACE_IO) + + /* + * If we get an invalid address, return this so that comparisons with + * FDT_ADDR_T_NONE work correctly + */ + if (addr == 0xffffffff) + return addr; + else if (addr & PCI_BASE_ADDRESS_SPACE_IO) return addr & PCI_BASE_ADDRESS_IO_MASK; else return addr & PCI_BASE_ADDRESS_MEM_MASK;

ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v6: - Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5: - Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3: - Drop 'Intel' from 'Intel ACPI' - Reword commit message to drop the bit about ACPI being complicated - Compute ACPI_NAME_MAX from ACPI_NAME_LEN - Rename acpi_return_name() to acpi_copy_name() - Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2: - Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
diff --git a/configs/tools-only_defconfig b/configs/tools-only_defconfig index 6ca50dc5fd3..2811b2cd37d 100644 --- a/configs/tools-only_defconfig +++ b/configs/tools-only_defconfig @@ -26,3 +26,4 @@ CONFIG_SYSRESET=y # CONFIG_VIRTIO_PCI is not set # CONFIG_VIRTIO_SANDBOX is not set # CONFIG_EFI_LOADER is not set +# CONFIG_ACPIGEN is not set diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index 3b95b5387b9..a3b03993423 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -261,4 +261,13 @@ config DM_DEV_READ_INLINE bool default y if !OF_LIVE
+config ACPIGEN + bool "Support ACPI table generation in driver model" + default y if SANDBOX || GENERATE_ACPI_TABLE + help + This option enables generation of ACPI tables using driver-model + devices. It adds a new operation struct to each driver, to support + things like generating device-specific tables and returning the ACPI + name of a device. + endmenu diff --git a/drivers/core/Makefile b/drivers/core/Makefile index bce7467da1d..c707026a3a0 100644 --- a/drivers/core/Makefile +++ b/drivers/core/Makefile @@ -3,6 +3,7 @@ # Copyright (c) 2013 Google, Inc
obj-y += device.o fdtaddr.o lists.o root.o uclass.o util.o +obj-$(CONFIG_$(SPL_TPL_)ACPIGEN) += acpi.o obj-$(CONFIG_DEVRES) += devres.o obj-$(CONFIG_$(SPL_)DM_DEVICE_REMOVE) += device-remove.o obj-$(CONFIG_$(SPL_)SIMPLE_BUS) += simple-bus.o diff --git a/drivers/core/acpi.c b/drivers/core/acpi.c new file mode 100644 index 00000000000..ba50d688fef --- /dev/null +++ b/drivers/core/acpi.c @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Core driver model support for ACPI table generation + * + * Copyright 2019 Google LLC + * Written by Simon Glass sjg@chromium.org + */ + +#define LOG_CATEOGRY LOGC_ACPI + +#include <common.h> +#include <dm.h> +#include <dm/acpi.h> +#include <dm/root.h> + +int acpi_copy_name(char *out_name, const char *name) +{ + strncpy(out_name, name, ACPI_NAME_LEN); + out_name[ACPI_NAME_LEN] = '\0'; + + return 0; +} + +int acpi_get_name(const struct udevice *dev, char *out_name) +{ + struct acpi_ops *aops; + + aops = device_get_acpi_ops(dev); + if (aops && aops->get_name) + return aops->get_name(dev, out_name); + + return -ENOSYS; +} diff --git a/include/dm/acpi.h b/include/dm/acpi.h new file mode 100644 index 00000000000..ba0813fa21c --- /dev/null +++ b/include/dm/acpi.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Core ACPI (Advanced Configuration and Power Interface) support + * + * Copyright 2019 Google LLC + * Written by Simon Glass sjg@chromium.org + */ + +#ifndef __DM_ACPI_H__ +#define __DM_ACPI_H__ + +/* Allow operations to be optional for ACPI */ +#if CONFIG_IS_ENABLED(ACPIGEN) +#define ACPI_OPS_PTR(_ptr) .acpi_ops = _ptr, +#else +#define ACPI_OPS_PTR(_ptr) +#endif + +/* Length of an ACPI name string, excluding nul terminator */ +#define ACPI_NAME_LEN 4 + +/* Length of an ACPI name string including nul terminator */ +#define ACPI_NAME_MAX (ACPI_NAME_LEN + 1) + +/** + * struct acpi_ops - ACPI operations supported by driver model + */ +struct acpi_ops { + /** + * get_name() - Obtain the ACPI name of a device + * + * @dev: Device to check + * @out_name: Place to put the name, must hold at least ACPI_NAME_MAX + * bytes + * @return 0 if OK, -ENOENT if no name is available, other -ve value on + * other error + */ + int (*get_name)(const struct udevice *dev, char *out_name); +}; + +#define device_get_acpi_ops(dev) ((dev)->driver->acpi_ops) + +/** + * acpi_get_name() - Obtain the ACPI name of a device + * + * @dev: Device to check + * @out_name: Place to put the name, must hold at least ACPI_NAME_MAX + * bytes + * @return 0 if OK, -ENOENT if no name is available, other -ve value on + * other error + */ +int acpi_get_name(const struct udevice *dev, char *out_name); + +/** + * acpi_copy_name() - Copy an ACPI name to an output buffer + * + * This convenience function can be used to return a literal string as a name + * in functions that implement the get_name() method. + * + * For example: + * + * static int mydev_get_name(const struct udevice *dev, char *out_name) + * { + * return acpi_copy_name(out_name, "WIBB"); + * } + * + * @out_name: Place to put the name + * @name: Name to copy + * @return 0 (always) + */ +int acpi_copy_name(char *out_name, const char *name); + +#endif diff --git a/include/dm/device.h b/include/dm/device.h index a56164b19bb..35e19d87005 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -245,6 +245,8 @@ struct udevice_id { * pointers defined by the driver, to implement driver functions required by * the uclass. * @flags: driver flags - see DM_FLAGS_... + * @acpi_ops: Advanced Configuration and Power Interface (ACPI) operations, + * allowing the device to add things to the ACPI tables passed to Linux */ struct driver { char *name; @@ -264,6 +266,9 @@ struct driver { int per_child_platdata_auto_alloc_size; const void *ops; /* driver-specific operations */ uint32_t flags; +#if CONFIG_IS_ENABLED(ACPIGEN) + struct acpi_ops *acpi_ops; +#endif };
/* Declare a new U-Boot driver */ diff --git a/include/log.h b/include/log.h index 62fb8afbd0e..fbcbd42fb4b 100644 --- a/include/log.h +++ b/include/log.h @@ -51,6 +51,8 @@ enum log_category_t { LOGC_SANDBOX, /* Related to the sandbox board */ LOGC_BLOBLIST, /* Bloblist */ LOGC_DEVRES, /* Device resources (devres_... functions) */ + /* Advanced Configuration and Power Interface (ACPI) */ + LOGC_ACPI,
LOGC_COUNT, /* Number of log categories */ LOGC_END, /* Sentinel value for a list of log categories */

On Thu, Apr 09, 2020 at 10:27:38AM -0600, Simon Glass wrote:
ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Both looks good to me now, thanks!
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v6:
- Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5:
- Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3:
- Drop 'Intel' from 'Intel ACPI'
- Reword commit message to drop the bit about ACPI being complicated
- Compute ACPI_NAME_MAX from ACPI_NAME_LEN
- Rename acpi_return_name() to acpi_copy_name()
- Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2:
- Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
diff --git a/configs/tools-only_defconfig b/configs/tools-only_defconfig index 6ca50dc5fd3..2811b2cd37d 100644 --- a/configs/tools-only_defconfig +++ b/configs/tools-only_defconfig @@ -26,3 +26,4 @@ CONFIG_SYSRESET=y # CONFIG_VIRTIO_PCI is not set # CONFIG_VIRTIO_SANDBOX is not set # CONFIG_EFI_LOADER is not set +# CONFIG_ACPIGEN is not set diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index 3b95b5387b9..a3b03993423 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -261,4 +261,13 @@ config DM_DEV_READ_INLINE bool default y if !OF_LIVE
+config ACPIGEN
- bool "Support ACPI table generation in driver model"
- default y if SANDBOX || GENERATE_ACPI_TABLE
- help
This option enables generation of ACPI tables using driver-model
devices. It adds a new operation struct to each driver, to support
things like generating device-specific tables and returning the ACPI
name of a device.
endmenu diff --git a/drivers/core/Makefile b/drivers/core/Makefile index bce7467da1d..c707026a3a0 100644 --- a/drivers/core/Makefile +++ b/drivers/core/Makefile @@ -3,6 +3,7 @@ # Copyright (c) 2013 Google, Inc
obj-y += device.o fdtaddr.o lists.o root.o uclass.o util.o +obj-$(CONFIG_$(SPL_TPL_)ACPIGEN) += acpi.o obj-$(CONFIG_DEVRES) += devres.o obj-$(CONFIG_$(SPL_)DM_DEVICE_REMOVE) += device-remove.o obj-$(CONFIG_$(SPL_)SIMPLE_BUS) += simple-bus.o diff --git a/drivers/core/acpi.c b/drivers/core/acpi.c new file mode 100644 index 00000000000..ba50d688fef --- /dev/null +++ b/drivers/core/acpi.c @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Core driver model support for ACPI table generation
- Copyright 2019 Google LLC
- Written by Simon Glass sjg@chromium.org
- */
+#define LOG_CATEOGRY LOGC_ACPI
+#include <common.h> +#include <dm.h> +#include <dm/acpi.h> +#include <dm/root.h>
+int acpi_copy_name(char *out_name, const char *name) +{
- strncpy(out_name, name, ACPI_NAME_LEN);
- out_name[ACPI_NAME_LEN] = '\0';
- return 0;
+}
+int acpi_get_name(const struct udevice *dev, char *out_name) +{
- struct acpi_ops *aops;
- aops = device_get_acpi_ops(dev);
- if (aops && aops->get_name)
return aops->get_name(dev, out_name);
- return -ENOSYS;
+} diff --git a/include/dm/acpi.h b/include/dm/acpi.h new file mode 100644 index 00000000000..ba0813fa21c --- /dev/null +++ b/include/dm/acpi.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Core ACPI (Advanced Configuration and Power Interface) support
- Copyright 2019 Google LLC
- Written by Simon Glass sjg@chromium.org
- */
+#ifndef __DM_ACPI_H__ +#define __DM_ACPI_H__
+/* Allow operations to be optional for ACPI */ +#if CONFIG_IS_ENABLED(ACPIGEN) +#define ACPI_OPS_PTR(_ptr) .acpi_ops = _ptr, +#else +#define ACPI_OPS_PTR(_ptr) +#endif
+/* Length of an ACPI name string, excluding nul terminator */ +#define ACPI_NAME_LEN 4
+/* Length of an ACPI name string including nul terminator */ +#define ACPI_NAME_MAX (ACPI_NAME_LEN + 1)
+/**
- struct acpi_ops - ACPI operations supported by driver model
- */
+struct acpi_ops {
- /**
* get_name() - Obtain the ACPI name of a device
*
* @dev: Device to check
* @out_name: Place to put the name, must hold at least ACPI_NAME_MAX
* bytes
* @return 0 if OK, -ENOENT if no name is available, other -ve value on
* other error
*/
- int (*get_name)(const struct udevice *dev, char *out_name);
+};
+#define device_get_acpi_ops(dev) ((dev)->driver->acpi_ops)
+/**
- acpi_get_name() - Obtain the ACPI name of a device
- @dev: Device to check
- @out_name: Place to put the name, must hold at least ACPI_NAME_MAX
- bytes
- @return 0 if OK, -ENOENT if no name is available, other -ve value on
- other error
- */
+int acpi_get_name(const struct udevice *dev, char *out_name);
+/**
- acpi_copy_name() - Copy an ACPI name to an output buffer
- This convenience function can be used to return a literal string as a name
- in functions that implement the get_name() method.
- For example:
- static int mydev_get_name(const struct udevice *dev, char *out_name)
- {
return acpi_copy_name(out_name, "WIBB");
- }
- @out_name: Place to put the name
- @name: Name to copy
- @return 0 (always)
- */
+int acpi_copy_name(char *out_name, const char *name);
+#endif diff --git a/include/dm/device.h b/include/dm/device.h index a56164b19bb..35e19d87005 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -245,6 +245,8 @@ struct udevice_id {
- pointers defined by the driver, to implement driver functions required by
- the uclass.
- @flags: driver flags - see DM_FLAGS_...
- @acpi_ops: Advanced Configuration and Power Interface (ACPI) operations,
*/
- allowing the device to add things to the ACPI tables passed to Linux
struct driver { char *name; @@ -264,6 +266,9 @@ struct driver { int per_child_platdata_auto_alloc_size; const void *ops; /* driver-specific operations */ uint32_t flags; +#if CONFIG_IS_ENABLED(ACPIGEN)
- struct acpi_ops *acpi_ops;
+#endif };
/* Declare a new U-Boot driver */ diff --git a/include/log.h b/include/log.h index 62fb8afbd0e..fbcbd42fb4b 100644 --- a/include/log.h +++ b/include/log.h @@ -51,6 +51,8 @@ enum log_category_t { LOGC_SANDBOX, /* Related to the sandbox board */ LOGC_BLOBLIST, /* Bloblist */ LOGC_DEVRES, /* Device resources (devres_... functions) */
/* Advanced Configuration and Power Interface (ACPI) */
LOGC_ACPI,
LOGC_COUNT, /* Number of log categories */ LOGC_END, /* Sentinel value for a list of log categories */
-- 2.26.0.292.g33ef6b2f38-goog

On Thu, 9 Apr 2020 at 11:40, Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Thu, Apr 09, 2020 at 10:27:38AM -0600, Simon Glass wrote:
ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Both looks good to me now, thanks!
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v6:
- Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5:
- Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3:
- Drop 'Intel' from 'Intel ACPI'
- Reword commit message to drop the bit about ACPI being complicated
- Compute ACPI_NAME_MAX from ACPI_NAME_LEN
- Rename acpi_return_name() to acpi_copy_name()
- Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2:
- Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
Andy let me add your tag.
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com

Hi Simon,
On Fri, Apr 10, 2020 at 3:36 AM Simon Glass sjg@chromium.org wrote:
On Thu, 9 Apr 2020 at 11:40, Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Thu, Apr 09, 2020 at 10:27:38AM -0600, Simon Glass wrote:
ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Both looks good to me now, thanks!
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v6:
- Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5:
- Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3:
- Drop 'Intel' from 'Intel ACPI'
- Reword commit message to drop the bit about ACPI being complicated
- Compute ACPI_NAME_MAX from ACPI_NAME_LEN
- Rename acpi_return_name() to acpi_copy_name()
- Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2:
- Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
Andy let me add your tag.
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com
Do you know what happened to this series?
I only see 2 patches in this series showing up on the patchwork. http://patchwork.ozlabs.org/user/todo/uboot/?series=169449
Regards, Bin

Hi Simon,
On Wed, Apr 15, 2020 at 10:31 PM Bin Meng bmeng.cn@gmail.com wrote:
Hi Simon,
On Fri, Apr 10, 2020 at 3:36 AM Simon Glass sjg@chromium.org wrote:
On Thu, 9 Apr 2020 at 11:40, Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Thu, Apr 09, 2020 at 10:27:38AM -0600, Simon Glass wrote:
ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Both looks good to me now, thanks!
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v6:
- Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5:
- Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3:
- Drop 'Intel' from 'Intel ACPI'
- Reword commit message to drop the bit about ACPI being complicated
- Compute ACPI_NAME_MAX from ACPI_NAME_LEN
- Rename acpi_return_name() to acpi_copy_name()
- Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2:
- Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
Andy let me add your tag.
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com
Do you know what happened to this series?
I only see 2 patches in this series showing up on the patchwork. http://patchwork.ozlabs.org/user/todo/uboot/?series=169449
Or show I replace the 2 patches tagged as v6 in the v5 sereis? http://patchwork.ozlabs.org/user/todo/uboot/?series=169328
Regards, Bin

Hi Bin,
On Wed, 15 Apr 2020 at 08:38, Bin Meng bmeng.cn@gmail.com wrote:
Hi Simon,
On Wed, Apr 15, 2020 at 10:31 PM Bin Meng bmeng.cn@gmail.com wrote:
Hi Simon,
On Fri, Apr 10, 2020 at 3:36 AM Simon Glass sjg@chromium.org wrote:
On Thu, 9 Apr 2020 at 11:40, Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Thu, Apr 09, 2020 at 10:27:38AM -0600, Simon Glass wrote:
ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Both looks good to me now, thanks!
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v6:
- Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5:
- Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3:
- Drop 'Intel' from 'Intel ACPI'
- Reword commit message to drop the bit about ACPI being complicated
- Compute ACPI_NAME_MAX from ACPI_NAME_LEN
- Rename acpi_return_name() to acpi_copy_name()
- Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2:
- Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
Andy let me add your tag.
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com
Do you know what happened to this series?
I only see 2 patches in this series showing up on the patchwork. http://patchwork.ozlabs.org/user/todo/uboot/?series=169449
Or show I replace the 2 patches tagged as v6 in the v5 sereis? http://patchwork.ozlabs.org/user/todo/uboot/?series=169328
Yes that's right. I didn't send the whole thing again as there were just those two minor changes.
Regards, Simon

On Fri, Apr 10, 2020 at 12:28 AM Simon Glass sjg@chromium.org wrote:
ACPI (Advanced Configuration and Power Interface) is a standard for specifying information about a platform. It is a little like device tree but the bindings are part of the specification and it supports an interpreted bytecode language.
Driver model does not use ACPI for U-Boot's configuration, but it is convenient to have it support generation of ACPI tables for passing to Linux, etc.
As a starting point, add an optional set of ACPI operations to each device. Initially only a single operation is available, to obtain the ACPI name for the device. More operations are added later.
Enable ACPI for sandbox to ensure build coverage and so that we can add tests.
Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v6:
- Use ACPI_NAME_LEN in acpi_copy_name since we add the nul anyway
Changes in v5:
- Capitalise ACPI_OPS_PTR since it includes a comma
Changes in v4: None Changes in v3:
- Drop 'Intel' from 'Intel ACPI'
- Reword commit message to drop the bit about ACPI being complicated
- Compute ACPI_NAME_MAX from ACPI_NAME_LEN
- Rename acpi_return_name() to acpi_copy_name()
- Use strncpy() instead of strcpy() in acpi_copy_name()
Changes in v2:
- Move LOGC_ACPI definition to this patch
configs/tools-only_defconfig | 1 + drivers/core/Kconfig | 9 +++++ drivers/core/Makefile | 1 + drivers/core/acpi.c | 33 ++++++++++++++++ include/dm/acpi.h | 73 ++++++++++++++++++++++++++++++++++++ include/dm/device.h | 5 +++ include/log.h | 2 + 7 files changed, 124 insertions(+) create mode 100644 drivers/core/acpi.c create mode 100644 include/dm/acpi.h
applied to u-boot-x86, thanks!

On Thu, 9 Apr 2020 at 10:28, Simon Glass sjg@chromium.org wrote:
At present if reading a BAR returns 0xffffffff then the value is masked and a different value is returned. This makes it harder to detect the problem when debugging.
Update the function to avoid masking in this case.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com
Changes in v6:
- Rework commit message to avoid mention of missing device
Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: None
drivers/pci/pci-uclass.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
Andy let me add your tag based on your email on the other v6 patch.
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com

On Fri, Apr 10, 2020 at 12:28 AM Simon Glass sjg@chromium.org wrote:
At present if reading a BAR returns 0xffffffff then the value is masked and a different value is returned. This makes it harder to detect the problem when debugging.
Update the function to avoid masking in this case.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Wolfgang Wallner wolfgang.wallner@br-automation.com
Changes in v6:
- Rework commit message to avoid mention of missing device
Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: None
drivers/pci/pci-uclass.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
applied to u-boot-x86, thanks!
participants (3)
-
Andy Shevchenko
-
Bin Meng
-
Simon Glass