Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1680596 > unrolled thread

[PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage

Started byLoc Ho <lho@apm.com>
First post2017-07-03 23:40 +0200
Last post2017-07-04 09:30 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage Loc Ho <lho@apm.com> - 2017-07-03 23:40 +0200
    Re: [PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage "Rafael J. Wysocki" <rafael@kernel.org> - 2017-07-03 23:50 +0200
      Re: [PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio  usage Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-04 09:30 +0200

#1680596 — [PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage

FromLoc Ho <lho@apm.com>
Date2017-07-03 23:40 +0200
Subject[PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage
Message-ID<tZhex-7h6-9@gated-at.bofh.it>
The current SPCR code does not check the access width of the mmio, and
uses a default of 8bit register accesses.  This prevents devices that
only do 16 or 32bit register accesses from working.  By simply checking
this field and setting the mmio string appropriately, this issue can be
corrected.  To prevent any legacy issues, the code will default to 8bit
accesses if the value is anything but 16 or 32.

Signed-off-by: Loc Ho <lho@apm.com>
[Re-send as single patch set]
Signed-off-by: Jon Mason <jon.mason@broadcom.com>
---
 drivers/acpi/spcr.c     | 18 ++++++++++++++++--
 include/acpi/acrestyp.h |  7 +++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c
index 3afa8c1..2905063 100644
--- a/drivers/acpi/spcr.c
+++ b/drivers/acpi/spcr.c
@@ -74,8 +74,22 @@ int __init parse_spcr(bool earlycon)
 		goto done;
 	}
 
-	iotype = table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY ?
-			"mmio" : "io";
+	if (table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
+		switch (table->serial_port.access_width) {
+		default:
+			pr_err("Unexpected SPCR Access Width.  Defaulting to byte size\n");
+		case ACPI_ACCESS_SIZE_BYTE:
+			iotype = "mmio";
+			break;
+		case ACPI_ACCESS_SIZE_WORD:
+			iotype = "mmio16";
+			break;
+		case ACPI_ACCESS_SIZE_DWORD:
+			iotype = "mmio32";
+			break;
+		}
+	} else
+		iotype = "io";
 
 	switch (table->interface_type) {
 	case ACPI_DBG2_ARM_SBSA_32BIT:
diff --git a/include/acpi/acrestyp.h b/include/acpi/acrestyp.h
index f0f7403..781cb55 100644
--- a/include/acpi/acrestyp.h
+++ b/include/acpi/acrestyp.h
@@ -372,6 +372,13 @@ struct acpi_resource_generic_register {
 	u64 address;
 };
 
+/* Generic Address Space Access Sizes */
+#define ACPI_ACCESS_SIZE_UNDEFINED		0
+#define ACPI_ACCESS_SIZE_BYTE			1
+#define ACPI_ACCESS_SIZE_WORD			2
+#define ACPI_ACCESS_SIZE_DWORD			3
+#define ACPI_ACCESS_SIZE_QWORD			4
+
 struct acpi_resource_gpio {
 	u8 revision_id;
 	u8 connection_type;
-- 
1.8.3.1

[toc] | [next] | [standalone]


#1680599

From"Rafael J. Wysocki" <rafael@kernel.org>
Date2017-07-03 23:50 +0200
Message-ID<tZhod-7kC-11@gated-at.bofh.it>
In reply to#1680596
On Mon, Jul 3, 2017 at 11:33 PM, Loc Ho <lho@apm.com> wrote:
> The current SPCR code does not check the access width of the mmio, and
> uses a default of 8bit register accesses.  This prevents devices that
> only do 16 or 32bit register accesses from working.  By simply checking
> this field and setting the mmio string appropriately, this issue can be
> corrected.  To prevent any legacy issues, the code will default to 8bit
> accesses if the value is anything but 16 or 32.
>
> Signed-off-by: Loc Ho <lho@apm.com>
> [Re-send as single patch set]
> Signed-off-by: Jon Mason <jon.mason@broadcom.com>

Greg, Aleksey, any objections here?

If not, I'll route this through the ACPI tree.


> ---
>  drivers/acpi/spcr.c     | 18 ++++++++++++++++--
>  include/acpi/acrestyp.h |  7 +++++++
>  2 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c
> index 3afa8c1..2905063 100644
> --- a/drivers/acpi/spcr.c
> +++ b/drivers/acpi/spcr.c
> @@ -74,8 +74,22 @@ int __init parse_spcr(bool earlycon)
>                 goto done;
>         }
>
> -       iotype = table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY ?
> -                       "mmio" : "io";
> +       if (table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
> +               switch (table->serial_port.access_width) {
> +               default:
> +                       pr_err("Unexpected SPCR Access Width.  Defaulting to byte size\n");
> +               case ACPI_ACCESS_SIZE_BYTE:
> +                       iotype = "mmio";
> +                       break;
> +               case ACPI_ACCESS_SIZE_WORD:
> +                       iotype = "mmio16";
> +                       break;
> +               case ACPI_ACCESS_SIZE_DWORD:
> +                       iotype = "mmio32";
> +                       break;
> +               }
> +       } else
> +               iotype = "io";
>
>         switch (table->interface_type) {
>         case ACPI_DBG2_ARM_SBSA_32BIT:
> diff --git a/include/acpi/acrestyp.h b/include/acpi/acrestyp.h
> index f0f7403..781cb55 100644
> --- a/include/acpi/acrestyp.h
> +++ b/include/acpi/acrestyp.h
> @@ -372,6 +372,13 @@ struct acpi_resource_generic_register {
>         u64 address;
>  };
>
> +/* Generic Address Space Access Sizes */
> +#define ACPI_ACCESS_SIZE_UNDEFINED             0
> +#define ACPI_ACCESS_SIZE_BYTE                  1
> +#define ACPI_ACCESS_SIZE_WORD                  2
> +#define ACPI_ACCESS_SIZE_DWORD                 3
> +#define ACPI_ACCESS_SIZE_QWORD                 4
> +
>  struct acpi_resource_gpio {
>         u8 revision_id;
>         u8 connection_type;
> --
> 1.8.3.1
>

[toc] | [prev] | [next] | [standalone]


#1680712 — Re: [PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-04 09:30 +0200
SubjectRe: [PATCH v2 1/2] ACPI: SPCR: Use access width to determine mmio usage
Message-ID<tZqrv-5a4-11@gated-at.bofh.it>
In reply to#1680599
On Mon, Jul 03, 2017 at 11:44:30PM +0200, Rafael J. Wysocki wrote:
> On Mon, Jul 3, 2017 at 11:33 PM, Loc Ho <lho@apm.com> wrote:
> > The current SPCR code does not check the access width of the mmio, and
> > uses a default of 8bit register accesses.  This prevents devices that
> > only do 16 or 32bit register accesses from working.  By simply checking
> > this field and setting the mmio string appropriately, this issue can be
> > corrected.  To prevent any legacy issues, the code will default to 8bit
> > accesses if the value is anything but 16 or 32.
> >
> > Signed-off-by: Loc Ho <lho@apm.com>
> > [Re-send as single patch set]
> > Signed-off-by: Jon Mason <jon.mason@broadcom.com>
> 
> Greg, Aleksey, any objections here?
> 
> If not, I'll route this through the ACPI tree.

No objections from me for either of these patches:
	Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web