From: Al Stone <ahs3(a)redhat.com>
This patch set is in the acpi-topic-seattle branch of acpi.git.
The basic idea is that these patches are an example of how to implement
ACPI for the AMD Seattle platform. Many of them have been borrowed from
the Fedora arm64 kernel tree which is at:
git://git.fedorahosted.org/git/kernel-arm64.git
Additional patches come from Linaro and LKMLA. With the exception of the
PCI patches, or others mentioned below, the intent is that the original
authors of these patches will submit them upstream. As always, they rely
on the ACPI core patches already being in place.
Patches 0001-006 are some cleanup and nice-to-have patches that let
ACPI, UEFI and the Seattle platform work better together.
Patch 0007 is Graeme's SBSA console patch, which ultimately needs to
be replaced with a proper pl011 console driver (still being worked on
by ARM, I believe).
Patch 0008 introduces ACPI support for the Seattle's AHCI code.
Patch 0009 fixes a compilation error in the PNP code.
Patch 0010 introduces some skeleton PCI functions to be replaced later.
Patch 0011 adds support for the secondary CPU parking protocol.
Patches 0011 and 0012 add general support for the AMD XGBE 10Gbe network
interface.
Patches 0014-0025 are from the device properties previously posted on
the ACPI mailing list; these may need updates if the final versions put
into the Linux tree differ. NB: 0017-0025 are not strictly required for
Seattle, but have been included so that the entire patch set posted on
LKMLA is included.
Patch 0026 adds ACPI support to the AMD XGBE 10Gbe interface. Yes, just
one patch.
Patch 0027 adds code to make it easy to set up DMA coherency on a device
using ACPI.
Patch 0028 may or may not be useful for upstream; it corrects a problem
with DMA operations when ACPI and PCI are being used but there may be
better ways to handle it.
Patch 0029 removes at DT dependency in the arch timer that can cause a
hang when using ACPI.
Patches 0030-0034 do basic PCI setup based on the contents of the MCFG
table in ACPI (for PCIe); these are also a first generation and definitely
need refinement and refactoring -- in some cases, there is code duplicated
from x86 or ia64, for example.
Patches 0035-0037 fix compiler warnings that annoyed me.
Patch 0038 allows one to skip adding a console= parameter on the command
line.
These patches were tested on an AMD Seattle platform, using the 71C version
of their firmware (future versions will have needed fixes for PCI windows
and some other odds and ends). The kernel command line was:
BOOT_IMAGE=/Image.acpi.git root=UUID=d5f87d27-cd7d-4ac5-9e16-dfa850ae32ad \
ro console=ttySBSA0,115200 earlycon=sbsauart,0xe1010000 vconsole.keymap=us \
crashkernel=auto vconsole.font=latarcyrheb-sun16 acpi=force \
acpi_force_table_verification uefi_debug
The console, SATA, and NIC all work as expected. PCIe works (PCI will need
a new DSDT) with a SATA card I had laying around. It is known to work with
a couple of other PCIe devices, but that's all I tried.
Things to do:
-- Get PCI re-done; there are way too many x86-isms in the code, and
some serious refactoring and cleanup is needed; the ia64 seems to
have taken some good steps in this direction.
-- MSI(-X) support: a DT version has been posted, and some ACPI work
is under way.
-- KVM support: ACPI support patches are available, but were not included
here since I have not had time to test them.
-- Subject the code to the full FWTS; this is pending available LAVA
machines and some patches to FWTS, but the CI loop is set up.
-- Plus whatever ACPI spec changes or additions arise....
Tested-by: Al Stone <al.stone(a)linaro.org>
Aaron Lu (2):
input: gpio_keys_polled - Add support for GPIO descriptors
input: gpio_keys_polled - Make use of device property API
Al Stone (5):
Fix arm64 compilation error in PNP code
arm64/pci/acpi: initial support for ACPI probing of PCI
drivers/base: correct function prototype to remove compiler warning
drivers/of: fix new device property function that could return a bad
value
AMD / XGBE : remove duplicate function definition
Graeme Gregory (2):
acpi: add arm to the platforms that use ioremap
tty: SBSA compatible UART
Hanjun Guo (1):
ARM64 / ACPI: Introduce some PCI functions when PCI is enabled
Mark Salter (11):
arm64: use EFI as last resort for reboot and poweroff
acpi: fix acpi_os_ioremap for arm64
arm64: add parking protocol support
acpi: add utility to test for device dma coherency
arm64: [NOT FOR UPSTREAM] fix dma_ops for ACPI and PCI devices
clocksource: arm_arch_timer: fix system hang
arm64/pci: replace weak raw pci ops with settable ops
arm64/acpi/pci: add support for parsing MCFG table
arm64/acpi/pci: provide hook for MCFG fixups
iommu/arm-smmu: fix NULL dereference with ACPI PCI devices
arm64: avoid need for console= to enable serial console
Mika Westerberg (7):
ACPI: Add support for device specific properties
ACPI: Allow drivers to match using Device Tree compatible property
misc: at25: Make use of device property API
gpio / ACPI: Add support for _DSD device properties
gpio: sch: Consolidate core and resume banks
leds: leds-gpio: Add support for GPIO descriptors
gpio: Support for unified device properties interface
Rafael J. Wysocki (3):
Driver core: Unified device properties interface for platform firmware
Driver core: Unified interface for firmware node properties
leds: leds-gpio: Make use of device property API
Russell King (2):
ARM: Blacklist GCC 4.8.0 to GCC 4.8.2 - PR58854
ARM: fix some printk formats
Suravee Suthikulpanit (1):
ata: ahci_platform: Add ACPI support for AMD Seattle SATA controller
Tom Lendacky (3):
drivers: net: AMD Seattle XGBE 10GbE support for A0 silicon
drivers: net: AMD Seattle XGBE PHY support for A0 silicon
amd-xgbe: AMD 10GbE driver APCI support for A0
Will Deacon (1):
zap_pte_range: update addr when forcing flush after TLB batching
faiure
Documentation/acpi/gpio-properties.txt | 52 ++
arch/arm/kernel/asm-offsets.c | 12 +-
arch/arm/mm/init.c | 8 +-
arch/arm64/Kconfig | 6 +
arch/arm64/Makefile | 1 +
arch/arm64/include/asm/acpi.h | 3 +
arch/arm64/include/asm/pci.h | 57 +++
arch/arm64/include/asm/smp.h | 5 +
arch/arm64/kernel/Makefile | 3 +-
arch/arm64/kernel/acpi.c | 54 +-
arch/arm64/kernel/cpu_ops.c | 4 +
arch/arm64/kernel/efi.c | 11 +
arch/arm64/kernel/pci.c | 108 ++--
arch/arm64/kernel/process.c | 6 +
arch/arm64/kernel/setup.c | 22 +
arch/arm64/kernel/smp_parking_protocol.c | 107 ++++
arch/arm64/mm/dma-mapping.c | 103 ++++
arch/arm64/pci/Makefile | 2 +
arch/arm64/pci/mmconfig.c | 431 ++++++++++++++++
arch/arm64/pci/pci.c | 375 ++++++++++++++
drivers/acpi/Makefile | 1 +
drivers/acpi/internal.h | 6 +
drivers/acpi/osl.c | 6 +-
drivers/acpi/property.c | 567 +++++++++++++++++++++
drivers/acpi/scan.c | 120 ++++-
drivers/acpi/utils.c | 26 +
drivers/ata/Kconfig | 2 +-
drivers/ata/ahci_platform.c | 13 +
drivers/base/Makefile | 2 +-
drivers/base/dma-coherent.c | 6 +-
drivers/base/property.c | 625 +++++++++++++++++++++++
drivers/clocksource/arm_arch_timer.c | 11 +-
drivers/gpio/devres.c | 36 ++
drivers/gpio/gpio-sch.c | 293 +++++------
drivers/gpio/gpiolib-acpi.c | 78 ++-
drivers/gpio/gpiolib.c | 86 +++-
drivers/gpio/gpiolib.h | 7 +-
drivers/input/keyboard/gpio_keys_polled.c | 112 ++---
drivers/iommu/arm-smmu.c | 8 +-
drivers/irqchip/irq-gic-v3.c | 10 +
drivers/irqchip/irq-gic.c | 10 +
drivers/leds/leds-gpio.c | 186 +++----
drivers/misc/eeprom/at25.c | 34 +-
drivers/net/ethernet/amd/Kconfig | 2 +-
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 16 +-
drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 3 +
drivers/net/ethernet/amd/xgbe/xgbe-main.c | 289 ++++++++---
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 20 +-
drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | 4 +-
drivers/net/ethernet/amd/xgbe/xgbe.h | 13 +
drivers/net/phy/Kconfig | 2 +-
drivers/net/phy/amd-xgbe-phy.c | 791 ++++++++++++++++--------------
drivers/of/base.c | 103 +++-
drivers/pnp/resource.c | 2 +
drivers/tty/Kconfig | 6 +
drivers/tty/Makefile | 1 +
drivers/tty/sbsauart.c | 355 ++++++++++++++
include/acpi/acpi_bus.h | 27 +
include/acpi/acpi_io.h | 6 +
include/asm-generic/vmlinux.lds.h | 7 +
include/linux/acpi.h | 106 +++-
include/linux/gpio/consumer.h | 8 +
include/linux/gpio_keys.h | 3 +
include/linux/irqchip/arm-gic.h | 2 +
include/linux/leds.h | 1 +
include/linux/of.h | 44 ++
include/linux/property.h | 107 ++++
mm/memory.c | 1 +
68 files changed, 4611 insertions(+), 923 deletions(-)
create mode 100644 Documentation/acpi/gpio-properties.txt
create mode 100644 arch/arm64/kernel/smp_parking_protocol.c
create mode 100644 arch/arm64/pci/Makefile
create mode 100644 arch/arm64/pci/mmconfig.c
create mode 100644 arch/arm64/pci/pci.c
create mode 100644 drivers/acpi/property.c
create mode 100644 drivers/base/property.c
create mode 100644 drivers/tty/sbsauart.c
create mode 100644 include/linux/property.h
--
1.9.3
On 12/19/2014 12:47 PM, Suravee Suthikulanit wrote:
> On 12/19/2014 8:56 AM, Hanjun Guo wrote:
>> Hi Suravee,
>>
>> On 2014年12月18日 07:16, Suravee Suthikulpanit wrote:
>>> From: Suravee Suthikulpanit <Suravee.Suthikulpanit(a)amd.com>
>>>
>>> Device drivers typically use ACPI _HIDs/_CIDs listed in struct
>>> device_driver
>>> acpi_match_table to match devices. However, for generic drivers, we do
>>> not want to list _HID for all supported devices, and some device classes
>>> do not have _CID (e.g. SATA, USB). Instead, we can leverage ACPI _CLS,
>>> which specifies PCI-defined class code (i.e. base-class, subclass and
>>> programming interface).
>>>
>>> This patch adds support for matching ACPI devices using the _CLS method.
>>>
>>> Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit(a)amd.com>
>>> ---
>>> drivers/acpi/scan.c | 73
>>> +++++++++++++++++++++++++++++++++++++++++
>>> include/acpi/acnames.h | 1 +
>>> include/linux/acpi.h | 12 ++++++-
>>> include/linux/device.h | 1 +
>>> include/linux/mod_devicetable.h | 6 ++++
>>> 5 files changed, 92 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
>>> index d670158..6406648 100644
>>> --- a/drivers/acpi/scan.c
>>> +++ b/drivers/acpi/scan.c
>>> @@ -864,6 +864,79 @@ int acpi_match_device_ids(struct acpi_device
>>> *device,
>>> }
>>> EXPORT_SYMBOL(acpi_match_device_ids);
>>>
>>> +/**
>>> + * acpi_match_device_cls - Match a struct device against a ACPI _CLS
>>> method
>>> + * @dev_cls: A pointer to struct acpi_device_cls object to match
>>> against.
>>> + * @dev: The ACPI device structure to match.
>>> + *
>>> + * Check if @dev has a valid ACPI and _CLS handle. If there is a
>>> + * struct acpi_device_cls object for that handle, use that object to
>>> match
>>> + * against the given struct acpi_device_cls object.
>>> + *
>>> + * Return 0 on success or error code on failure.
>>> + */
>>> +int acpi_match_device_cls(const struct acpi_device_cls *dev_cls,
>>> + const struct device *dev)
>>> +{
>>> + int ret = -EINVAL;
>>> + acpi_status status;
>>> + struct acpi_device *adev;
>>> + union acpi_object *pkg;
>>> + struct acpi_device_cls cls;
>>> + struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
>>> + struct acpi_buffer format = { sizeof("NNN"), "NNN" };
>>> + struct acpi_buffer state = { 0, NULL };
>>> + acpi_handle handle = ACPI_HANDLE(dev);
>>
>> ...
>>
>>> + acpi_handle cls_handle;
>>> +
>>> + if (!handle || acpi_bus_get_device(handle, &adev))
>>
>> if handle is not NULL, adev will not NULL too :)
>> because you get the handle from adev, ACPI_HANDLE() is defined as:
>> acpi_device_handle(ACPI_COMPANION(dev)), and adev = ACPI_COMPANION(dev);
>>
>> you may use adev = ACPI_COMPANION(dev) to simplify the code.
>>
Thanks for the pointer.
>>> + return ret;
>>> +
>>> + if (!adev->status.present || !dev_cls)
>>> + return ret;
>>> +
>>> + status = acpi_get_handle(adev->handle, METHOD_NAME__CLS,
>>> &cls_handle);
>>
>> do we need this function called here? _CLS is the method under ACPI
>> device object in DSDT/SSDT, and you will get adev->handle == cls_handle
>> if I'm not wrong :)
You are right. It is not needed, and we can just evaluate right from the
handle.
>>> + if (ACPI_FAILURE(status))
>>> + return ret;
>>> +
>>> + status = acpi_evaluate_object(cls_handle, "_CLS", NULL, &buffer);
>>> + if (ACPI_FAILURE(status)) {
>>> + ACPI_EXCEPTION((AE_INFO, status, "Failed to Evaluat _CLS"));
>>> + return ret;
>>> + }
>>
>> I think you can evaluate _CLS directly with handle here.
>>
>> Thanks
>> Hanjun
>
Yep. I will send out the new patch in a bit.
Thanks,
Suravee
From: Suravee Suthikulpanit <Suravee.Suthikulpanit(a)amd.com>
This patch series introduce ACPI support for non-PCI AHCI platform driver.
Existing ACPI support for AHCI assumes the device controller is a PCI device.
Also, since there is no ACPI _HID/_CID for generic AHCI controller, the driver
could not use them for matching devices. Therefore, this patch introduces a mechanism
for drivers to match devices using ACPI _CLS method.
This patch series is rebased from:
http://git.linaro.org/leg/acpi/acpi.git acpi-5.1-v6
This topic was discussed earlier here (as part of introducing support for
AMD Seattle SATA controller):
http://marc.info/?l=linux-arm-kernel&m=141083492521584&w=2
Suravee Suthikulpanit (2):
ACPI / scan: Add support for ACPI _CLS device matching
ata: ahci_platform: Add ACPI _CLS matching
drivers/acpi/scan.c | 73 +++++++++++++++++++++++++++++++++++++++++
drivers/ata/Kconfig | 2 +-
drivers/ata/ahci_platform.c | 10 ++++++
include/acpi/acnames.h | 1 +
include/linux/acpi.h | 12 ++++++-
include/linux/device.h | 1 +
include/linux/mod_devicetable.h | 6 ++++
7 files changed, 103 insertions(+), 2 deletions(-)
--
1.9.3
If a wait_for_completion_timeout() call returns due to a timeout,
the mbox code can still call complete() after returning from the wait.
This can cause subsequent transmissions on a channel to fail, since
the wait_for_completion_timeout() sees the completion variable
is !=0, caused by the erroneous complete() call, and immediately
returns without waiting for the time as expected by the client.
Fix this by calling complete() only if the TX was successful.
Signed-off-by: Ashwin Chaugule <ashwin.chaugule(a)linaro.org>
---
drivers/mailbox/mailbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index 17e9e4a..4acaddb 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -101,7 +101,7 @@ static void tx_tick(struct mbox_chan *chan, int r)
if (mssg && chan->cl->tx_done)
chan->cl->tx_done(chan->cl, mssg, r);
- if (chan->cl->tx_block)
+ if ((!r) && chan->cl->tx_block)
complete(&chan->tx_complete);
}
--
1.9.1
With ACPI arm64 core paches and NUMA patch from Ganapatrao,
I prepared those ACPI based NUMA support for ARM64.
updates since RFC version:
- Address some comments from Arnd
- I tested those patches on simulation platform and find the
mappings of CPU to NUMA node and memory to NUMA node are
correct;
- fix some compile issues with CONFIG_ACPI_NUMA disabled;
- fix logical problem for the mappings of CPU to node ID
There is still a warning about not released a early remapped
memory, I'm working on it now.
Ganapatrao Kulkarni (1):
arm64:numa: adding numa support for arm64 platforms
Hanjun Guo (4):
ACPI / NUMA: Use pr_fmt() instead of printk
ACPI / NUMA: Remove redundant ACPI_DEBUG_OUTPUT and replace
ACPI_DEBUG_PRINT() with pr_debug()
ARM64 / ACPI: NUMA support based on SRAT and SLIT
ACPI / NUMA: Enable ACPI based NUMA on ARM64
arch/arm64/Kconfig | 33 ++
arch/arm64/include/asm/acpi.h | 7 +-
arch/arm64/include/asm/mmzone.h | 32 ++
arch/arm64/include/asm/numa.h | 46 +++
arch/arm64/kernel/Makefile | 1 +
arch/arm64/kernel/acpi_numa.c | 176 +++++++++++
arch/arm64/kernel/setup.c | 11 +
arch/arm64/kernel/smp.c | 2 +
arch/arm64/mm/Makefile | 1 +
arch/arm64/mm/init.c | 34 +-
arch/arm64/mm/numa.c | 674 ++++++++++++++++++++++++++++++++++++++++
drivers/acpi/Kconfig | 2 +-
drivers/acpi/numa.c | 108 ++++---
drivers/acpi/processor_core.c | 5 +
include/acpi/processor.h | 1 +
include/linux/acpi.h | 15 +
16 files changed, 1097 insertions(+), 51 deletions(-)
create mode 100644 arch/arm64/include/asm/mmzone.h
create mode 100644 arch/arm64/include/asm/numa.h
create mode 100644 arch/arm64/kernel/acpi_numa.c
create mode 100644 arch/arm64/mm/numa.c
--
1.9.1
Hi,
The luvOS distribution is booting on arm64 FVP base model.
The log goes here https://pastebin.linaro.org/view/dc319415 certainly
it is required to update the FWTS with arm64 patches.
The git repo - http://git.linaro.org/people/naresh.bhat/luvOS/luv-yocto.git
The wiki page is Under construction...:)
If you want to try it on your machine. You can just copy and paste
the below commands on your machine after installing the OE/Yocto
dependency packages on your host machine distribution.
$ git clone ssh://git@git.linaro.org/people/naresh.bhat/luvOS/luv-yocto.git
$ cd luv-yocto
$ . ./oe-init-build-env
$ vim conf/local.conf
and change the following lines in your local.conf file
BB_NUMBER_THREADS ?= "16"
...
......
MACHINE ??= "genericarmv8"
....
.........
DISTRO ?= "luv"
save and quit local.conf file
$ vim conf/bblayers.conf
Add the following line to BBLAYERS variable
<project-path>/luv-yocto/meta-luv
e.g.
BBLAYERS ?= " \
/home/nareshbhat/Projects/OE/arm64/luv-yocto/meta \
/home/nareshbhat/Projects/OE/arm64/luv-yocto/meta-yocto \
/home/nareshbhat/Projects/OE/arm64/luv-yocto/meta-yocto-bsp \
/home/nareshbhat/Projects/OE/arm64/luv-yocto/meta-luv \
"
Save and quit the bblayers.conf file
Now,
you can start building the project
$ bitbake luv-live-image
which generates HDD image, ISO image. You can also generate the
core-image-efi image which gives a rootfs from command
$ bitbake core-image-efi
Let me know if you have any issues.
-Cheers
Naresh
this is the RFC version of ACPI based NUMA support for ARM64,
it is based on 3.18-rc4 and v5 of ARM64 ACPI core patches, it also
based on DT based NUMA patch from Ganapatrao [1].
Have not tested yet, will do that after posted this patch
for RFC, any comment are welcomed.
[1] http://www.spinics.net/lists/arm-kernel/msg380197.html
Ganapatrao Kulkarni (1):
arm64:numa: adding numa support for arm64 platforms.
Hanjun Guo (4):
ACPI / NUMA: Use pr_fmt() instead of printk
ACPI / NUMA: Remove redundant ACPI_DEBUG_OUTPUT
ARM64 / ACPI: NUMA support based on SRAT and SLIT
ACPI / NUMA: Enable ACPI based NUMA on ARM64
arch/arm64/Kconfig | 33 ++
arch/arm64/include/asm/acpi.h | 3 +
arch/arm64/include/asm/mmzone.h | 32 ++
arch/arm64/include/asm/numa.h | 46 +++
arch/arm64/kernel/Makefile | 1 +
arch/arm64/kernel/acpi_numa.c | 176 +++++++++++
arch/arm64/kernel/setup.c | 10 +
arch/arm64/kernel/smp.c | 2 +
arch/arm64/mm/Makefile | 1 +
arch/arm64/mm/init.c | 34 +-
arch/arm64/mm/numa.c | 675 ++++++++++++++++++++++++++++++++++++++++
drivers/acpi/Kconfig | 2 +-
drivers/acpi/numa.c | 64 ++--
drivers/acpi/processor_core.c | 5 +
include/acpi/processor.h | 1 +
include/linux/acpi.h | 15 +
16 files changed, 1074 insertions(+), 26 deletions(-)
create mode 100644 arch/arm64/include/asm/mmzone.h
create mode 100644 arch/arm64/include/asm/numa.h
create mode 100644 arch/arm64/kernel/acpi_numa.c
create mode 100644 arch/arm64/mm/numa.c
--
1.9.1