From patchwork Wed Dec 3 12:34:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Xue X-Patchwork-Id: 5430451 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B79109F1D4 for ; Wed, 3 Dec 2014 12:45:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B9FC02034F for ; Wed, 3 Dec 2014 12:45:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9B85020272 for ; Wed, 3 Dec 2014 12:45:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752502AbaLCMpY (ORCPT ); Wed, 3 Dec 2014 07:45:24 -0500 Received: from mail-bn1bn0104.outbound.protection.outlook.com ([157.56.110.104]:6823 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751341AbaLCMpW (ORCPT ); Wed, 3 Dec 2014 07:45:22 -0500 Received: from BN1PR02MB200.namprd02.prod.outlook.com (10.242.214.156) by BN1PR02MB120.namprd02.prod.outlook.com (10.255.204.26) with Microsoft SMTP Server (TLS) id 15.1.26.15; Wed, 3 Dec 2014 12:45:20 +0000 Received: from BY1PR0201CA0011.namprd02.prod.outlook.com (25.160.191.149) by BN1PR02MB200.namprd02.prod.outlook.com (10.242.214.156) with Microsoft SMTP Server (TLS) id 15.1.26.15; Wed, 3 Dec 2014 12:45:17 +0000 Received: from BL2FFO11FD023.protection.gbl (2a01:111:f400:7c09::191) by BY1PR0201CA0011.outlook.office365.com (2a01:111:e400:4814::21) with Microsoft SMTP Server (TLS) id 15.1.31.17 via Frontend Transport; Wed, 3 Dec 2014 12:45:16 +0000 Received: from atltwp02.amd.com (165.204.84.222) by BL2FFO11FD023.mail.protection.outlook.com (10.173.161.102) with Microsoft SMTP Server id 15.1.6.13 via Frontend Transport; Wed, 3 Dec 2014 12:45:16 +0000 X-WSS-ID: 0NG0BFD-08-RKU-02 X-M-MSG: Received: from satlvexedge01.amd.com (satlvexedge01.amd.com [10.177.96.28]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by atltwp02.amd.com (Axway MailGate 5.3.1) with ESMTPS id 2FF19D1605A; Wed, 3 Dec 2014 06:45:13 -0600 (CST) Received: from SATLEXDAG03.amd.com (10.181.40.7) by satlvexedge01.amd.com (10.177.96.28) with Microsoft SMTP Server (TLS) id 14.3.195.1; Wed, 3 Dec 2014 06:45:45 -0600 Received: from SCYBEXDAG03.amd.com (10.34.11.13) by satlexdag03.amd.com (10.181.40.7) with Microsoft SMTP Server (TLS) id 14.3.195.1; Wed, 3 Dec 2014 07:45:12 -0500 Received: from kxue-X58A-UD3R.amd.com (10.237.74.21) by SCYBEXDAG03.amd.com (10.34.11.13) with Microsoft SMTP Server id 14.3.195.1; Wed, 3 Dec 2014 20:45:10 +0800 From: Ken Xue To: , CC: , , Ken Xue Subject: [PATCH 2/2] acpi:apd:add AMD ACPI2Platform device support Date: Wed, 3 Dec 2014 20:34:32 +0800 Message-ID: <1417610072-2217-1-git-send-email-Ken.Xue@amd.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(428002)(189002)(199003)(46102003)(95666004)(84676001)(575784001)(86362001)(87286001)(19580395003)(92566001)(89996001)(87936001)(106466001)(102836001)(53416004)(104166001)(229853001)(105586002)(107046002)(101416001)(47776003)(20776003)(64706001)(120916001)(99396003)(21056001)(31966008)(50466002)(50226001)(4396001)(50986999)(92726001)(19580405001)(44976005)(97736003)(48376002)(36756003)(62966003)(77156002)(68736005)(77096005)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:BN1PR02MB200; H:atltwp02.amd.com; FPR:; SPF:None; MLV:sfv; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Antispam: UriScan:;UriScan:; X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:;SRVR:BN1PR02MB200; X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601001); SRVR:BN1PR02MB200; X-Forefront-PRVS: 0414DF926F Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=Ken.Xue@amd.com; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:;SRVR:BN1PR02MB200; X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:;SRVR:BN1PR02MB120; X-OriginatorOrg: amd4.onmicrosoft.com Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This is a new feature to interpret AMD specific ACPI device to platform device such as I2C, UART found on AMD CZ and later chipsets. It based on INTEL LPSS and acpi soc. Signed-off-by: Ken Xue --- arch/x86/Kconfig | 11 +++++++ drivers/acpi/Makefile | 2 +- drivers/acpi/acpi_apd.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ drivers/acpi/internal.h | 6 ++++ drivers/acpi/scan.c | 1 + 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 drivers/acpi/acpi_apd.c diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index ded8a67..6402c79f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -495,6 +495,17 @@ config X86_INTEL_LPSS things like clock tree (common clock framework) and pincontrol which are needed by the LPSS peripheral drivers. +config X86_AMD_PLATFORM_DEVICE + bool "AMD ACPI2Platform devices support" + depends on ACPI + select COMMON_CLK + select PINCTRL + ---help--- + Select to interpret AMD specific ACPI device to platform device + such as I2C, UART found on AMD CARRIZO and later chipset. Selecting + this option enables things like clock tree (common clock framework) + and pinctrl. + config IOSF_MBI tristate "Intel SoC IOSF Sideband support for SoC platforms" depends on PCI diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index ae3397d..b07003a 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile @@ -40,7 +40,7 @@ acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o acpi-y += ec.o acpi-$(CONFIG_ACPI_DOCK) += dock.o acpi-y += pci_root.o pci_link.o pci_irq.o -acpi-y += acpi_soc.o acpi_lpss.o +acpi-y += acpi_soc.o acpi_lpss.o acpi_apd.o acpi-y += acpi_platform.o acpi-y += acpi_pnp.o acpi-y += int340x_thermal.o diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c new file mode 100644 index 0000000..9afc144 --- /dev/null +++ b/drivers/acpi/acpi_apd.c @@ -0,0 +1,82 @@ +/* + * AMD ACPI support for ACPI2platform device. + * + * Copyright (c) 2014, AMD Corporation. + * Authors: Ken Xue + * Wu, Jeff + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "internal.h" +#include "acpi_soc.h" + +struct acpi_soc asoc; + +#ifdef CONFIG_X86_AMD_PLATFORM_DEVICE +#define APD_ADDR(desc) ((unsigned long)&desc) + +static int acpi_apd_setup(struct acpi_soc_dev_private_data *pdata) +{ + struct acpi_soc_dev_desc *dev_desc = pdata->dev_desc; + struct clk *clk = ERR_PTR(-ENODEV); + + if (dev_desc->clk) + return 0; + + if (dev_desc->fixed_clk_rate) { + clk = clk_register_fixed_rate(&pdata->adev->dev, + dev_name(&pdata->adev->dev), + NULL, CLK_IS_ROOT, + dev_desc->fixed_clk_rate); + dev_desc->clk = clk; + clk_register_clkdev(clk, NULL, dev_name(&pdata->adev->dev)); + } + + return 0; +} + +static struct acpi_soc_dev_desc cz_i2c_desc = { + .setup = acpi_apd_setup, + .fixed_clk_rate = 133000000, +}; + +static struct acpi_soc_dev_desc cz_uart_desc = { + .setup = acpi_apd_setup, + .fixed_clk_rate = 48000000, +}; + +#else + +#define APD_ADDR(desc) (0UL) + +#endif /* CONFIG_X86_AMD_PLATFORM_DEVICE */ + +static struct acpi_device_id acpi_apd_device_ids[] = { + /* Generic apd devices */ + { "AMD0010", APD_ADDR(cz_i2c_desc) }, + { "AMD0020", APD_ADDR(cz_uart_desc) }, + { } +}; + + +void __init acpi_apd_init(void) +{ + asoc.ids = acpi_apd_device_ids; +#ifdef CONFIG_X86_AMD_PLATFORM_DEVICE + register_acpi_soc(&asoc, false); +#else + register_acpi_soc(&asoc, true); +#endif /*CONFIG_X86_AMD_PLATFORM_DEVICE*/ +} diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h index 447f6d6..c8a0e8e 100644 --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h @@ -68,6 +68,12 @@ static inline void acpi_debugfs_init(void) { return; } #endif void acpi_lpss_init(void); +#ifdef CONFIG_X86_AMD_PLATFORM_DEVICE +void acpi_apd_init(void); +#else +static inline void acpi_apd_init(void) {} +#endif + acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src); bool acpi_queue_hotplug_work(struct work_struct *work); void acpi_device_hotplug(struct acpi_device *adev, u32 src); diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 0476e90..24fef2b 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -2349,6 +2349,7 @@ int __init acpi_scan_init(void) acpi_pci_link_init(); acpi_processor_init(); acpi_lpss_init(); + acpi_apd_init(); acpi_cmos_rtc_init(); acpi_container_init(); acpi_memory_hotplug_init();