These patches add the DBG2/SPCR tables for FVP/Juno for kernel testing.
They allow a kernel to find a serial console without console= line.
They have been tested using the Redhat patches for SPCR support which are
work in progress!
Thanks
Changes since v1
Ryan pointed out I had used RTSM in the JUNO tables - fixed.
The leg-kernel release has been made and tagged as leg-20150415.0
This is based on mainline kernel v4.0
Repository : http://git.linaro.org/leg/acpi/leg-kernel.git
Direct Link:
https://git.linaro.org/leg/acpi/leg-kernel.git/commit/afdd440a8c69eea7f1365…
Notes :-
1) Much improved Seattle support thanks to patches from Redhat.
2) This release incorporates the SBSA UART support for pl011 driver from
Andre Przywara. This means that your console will become ttyAMA0
(console=ttyAMA0) on Juno/FVP. It also means to run FVP model you need
these options :-
-C bp.pl011_uart0.untimed_fifos=0
-C bp.pl011_uart0.revision="r1p5"
3) First release of leg-kernel where all preperation was done on a
Seattle running this release of leg-kernel.
The leg-kernel release has been made and tagged as leg-20150414.0
This is based on mainline kernel v4.0
Repository : http://git.linaro.org/leg/acpi/leg-kernel.git
Direct Link:
https://git.linaro.org/leg/acpi/leg-kernel.git/commit/afdd440a8c69eea7f1365…
Notes :-
1) This release restores support for AMD Seattle.
2) This release incorporates the SBSA UART support for pl011 driver from
Andre Przywara. This means that your console will become ttyAMA0
(console=ttyAMA0) on Juno/FVP. It also means to run FVP model you need
these options :-
-C bp.pl011_uart0.untimed_fifos=0
-C bp.pl011_uart0.revision="r1p5"
Dear Lina,
Courier was unable to deliver the parcel to you.
Please, open email attachment to print shipment label.
Thanks and best regards,
Brad Ritchie,
FedEx Operation Manager.
Dear Lina,
You have to appear in the Court on the April 15.
Please, prepare all the documents relating to the case and bring them to Court on the specified date.
Note: The case will be heard by the judge in your absence if you do not come.
The Court Notice is attached to this email.
Sincerely,
Donald Galloway,
District Clerk.
ACPI v5.1 introduced _CCA object for specifying cache coherency attribute
for devices. This patch implements a logic, which traverses device namespace
to parse the coherency information, and calling the corresponded
arch_setup_dma_ops().
It checks the _CCA during ACPI scan, and setup coherency during acpi_device creation.
Then, this is propagted to the platform_device when it is created at later time.
CC: Mark Salter <msalter(a)redhat.com>
CC: Hanjun Guo <hanjun.guo(a)linaro.org>
CC: Al Stone <al.stone(a)linaro.org>
Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit(a)amd.com>
---
NOTE:
The original patch has been submitted by Mark Salter, and discussed here:
* http://comments.gmane.org/gmane.linux.acpi.devel/70424
One of the reveiw comment was dissusing whether we need the do/while loop for
travesing parents of the device. AFAIK, there are no APIs that would do upsearch
from a particular node. The acpi_get_handle() is the closest one, but it is using
ACPI_NS_NO_UPSEARCH.
This has been rebased and tested with:
* http://git.linaro.org/leg/acpi/acpi.git acpi-5.1-v11
* [V8 PATCH 0/3] Introduce ACPI support for ahci_platform driver
(https://lkml.org/lkml/2015/3/30/729)
drivers/acpi/acpi_platform.c | 5 +++-
drivers/acpi/scan.c | 56 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index 1284138..47e37a8 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -108,9 +108,12 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev)
if (IS_ERR(pdev))
dev_err(&adev->dev, "platform device creation failed: %ld\n",
PTR_ERR(pdev));
- else
+ else {
+ arch_setup_dma_ops(&pdev->dev, 0, 0, NULL,
+ is_device_dma_coherent(&adev->dev));
dev_dbg(&adev->dev, "created platform device %s\n",
dev_name(&pdev->dev));
+ }
kfree(resources);
return pdev;
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 230ec983..4d81c55 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -11,6 +11,7 @@
#include <linux/kthread.h>
#include <linux/dmi.h>
#include <linux/nls.h>
+#include <linux/dma-mapping.h>
#include <asm/pgtable.h>
@@ -57,6 +58,9 @@ struct acpi_device_bus_id{
struct list_head node;
};
+static int acpi_bus_type_and_status(acpi_handle handle, int *type,
+ unsigned long long *sta);
+
void acpi_scan_lock_acquire(void)
{
mutex_lock(&acpi_scan_lock);
@@ -1327,6 +1331,51 @@ void acpi_bus_put_acpi_device(struct acpi_device *adev)
put_device(&adev->dev);
}
+/**
+ * acpi_check_and_set_coherency - check and set cache coherency of a device
+ * @device: ACPI device
+ *
+ * Search a device and its parents for a _CCA method and calculate
+ * the effective coherency property of the device. If found, set up
+ * appropriate dma_ops for the device.
+ *
+ * Note From ACPIv5.1 spec:
+ * If used _CCA must be included under all bus-master-capable
+ * devices defined as children of \_SB. The value of _CCA is inherited
+ * by all descendants of these devices, so it need not be repeated for
+ * their children devices and will be ignored by OSPM if it is provided
+ * there.
+ */
+static int acpi_check_and_set_coherency(struct acpi_device *device)
+{
+ acpi_status status;
+ unsigned long long eff_cca = ~0ULL;
+ acpi_handle tmp, handle = device->handle;
+
+ /* Calculate effective _CCA from all parents of this device */
+ do {
+ unsigned long cca;
+
+ status = acpi_get_handle(handle, "_CCA", &tmp);
+ if (ACPI_SUCCESS(status)) {
+ status = acpi_evaluate_integer(tmp, "_CCA", NULL, &cca);
+ /* Other values besides 0 and 1 are reserved */
+ if (ACPI_FAILURE(status) || (cca != 0 && cca != 1))
+ return -EINVAL;
+ eff_cca = cca;
+ }
+
+ status = acpi_get_parent(handle, &handle);
+ if (ACPI_FAILURE(status))
+ break;
+ } while (ACPI_SUCCESS(status));
+
+ if (eff_cca != ~0ULL)
+ arch_setup_dma_ops(&device->dev, 0, 0, NULL, eff_cca);
+
+ return 0;
+}
+
int acpi_device_add(struct acpi_device *device,
void (*release)(struct device *))
{
@@ -1398,6 +1447,13 @@ int acpi_device_add(struct acpi_device *device,
device->dev.parent = &device->parent->dev;
device->dev.bus = &acpi_bus_type;
device->dev.release = release;
+
+ result = acpi_check_and_set_coherency(device);
+ if (result) {
+ dev_err(&device->dev, "Error getting device _CCA information\n");
+ goto err;
+ }
+
result = device_add(&device->dev);
if (result) {
dev_err(&device->dev, "Error registering device\n");
--
2.1.0
The leg-kernel release has been made and tagged as leg-20150408.0
This is based on mainline kernel v4.0-rc7
Repository : http://git.linaro.org/leg/acpi/leg-kernel.git
Direct Link:
https://git.linaro.org/leg/acpi/leg-kernel.git/commit/4a93b8470719866b46d92…
Notes :-
1) This release restores support for AMD Seattle.
2) This release incorporates the SBSA UART support for pl011 driver from
Andre Przywara. This means that your console will become ttyAMA0
(console=ttyAMA0) on Juno/FVP. It also means to run FVP model you need
these options :-
-C bp.pl011_uart0.untimed_fifos=0
-C bp.pl011_uart0.revision="r1p5"