From patchwork Fri Feb 23 10:23:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 10237403 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5BCF0602DC for ; Fri, 23 Feb 2018 10:45:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 499B929513 for ; Fri, 23 Feb 2018 10:45:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3D12F29515; Fri, 23 Feb 2018 10:45:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AF86D29513 for ; Fri, 23 Feb 2018 10:45:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=bS+5LqJ4l0KAfDU/Q2KMH4uAI0ixfZIOwH6+Tj5Jqkw=; b=inbz7qYlDIuau1e41P9QtcYiA4 qVdO2msNm5YWCv5mFSOLH1Fv9DoKukmLzSu2I7j4est2MdWK2KjaEZP5sFpeAKnT3SDSEfOMs77bz ZCoeIvbWjDRzBkXPfEkdFCUlgTA1KAGTWJ9W8g3A5S67YJligYgJx3TzcvW+1YLBQOxFhJtEsXvOA FOemquzeWETbau89Wm0e5xJO2OknDB/R3sdOkOOyweYjZFtbbUh72YJKhdM5cul7VelyA7VhdQOtw fK7v/y5ssMxWeCSybGy5r+uCStZE+KgkUvwjic2ItOQg4TWK1OWlsC5/UHZEjLLz4+6AQX4dna88S TyEA9osQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1epArB-0006IP-NS; Fri, 23 Feb 2018 10:45:37 +0000 Received: from merlin.infradead.org ([2001:8b0:10b:1231::1]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1epAnJ-0002ym-5a for linux-arm-kernel@bombadil.infradead.org; Fri, 23 Feb 2018 10:41:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=SrMM0NVYzjnPGa3Htdpu08NtGVva1H4lk0FP2in38Iw=; b=XcwFpUvnBNuJBQ/0J4LfW4c3e lOMCTqunRzU8Ifxksgb6kB3A13dZRe+xgm/1MOcVAT6h1mona6Iqw0D06X99ca6idXL5lAvQbihgH Jj9LxmmlRh9UVrmkd1iqT7TvVbUUuamv9ZBHTSxrnvmm3nItgnwQxjRRK3/6774QG/KkgGQypMTzz /zJsX2icYylQPewT3Dq4i0gUzGcQdAZBi2k95ygjPeoGXIz0G8gs2mLUIKwC07gc6VFyt1yezq2uR qnINQyghxiL8D8bnYKABZnQg+dbOxmHNC2hQLXWotWGKCBw2uB3rn9Gd/uxyKk6N3Td5JCaL/OKtM NZldsgpAw==; Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]) by merlin.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1epAWv-0007AS-0x for linux-arm-kernel@lists.infradead.org; Fri, 23 Feb 2018 10:24:41 +0000 Received: by mail-pg0-x243.google.com with SMTP id j9so3203927pgv.3 for ; Fri, 23 Feb 2018 02:24:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=SrMM0NVYzjnPGa3Htdpu08NtGVva1H4lk0FP2in38Iw=; b=ON0P1ZhG3sfucEjDb8hBhy7HlhNOOy3C2ybi/M6tI7qJ2v74p0wALT/p52VXv0OqvL w1t2Wo/tIXrdTJ1DdX6zItewGSdGaxjcG7uQRrnXSxSbKS/m/vFxjQTlB/+MD5FiQ1mt Y4mCeyg3t2NGwr8W5SLpRcnf3gWfHBXt953Gc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=SrMM0NVYzjnPGa3Htdpu08NtGVva1H4lk0FP2in38Iw=; b=oYstzLdmKsDYAWeBiDV/tl/67D7OByQ30EpXQ6/qjb3ALV9S0+lXugJ97yCwifJEF3 xV09mZGCnZJNR6CZ1Xw4Tq4kEl+taXlDoPkPCsjTL0LXpOVmyte8We3axlB3fEdziA+2 l0rAd8+Hgcf+AjqvoFKadJchaZCnAsR7ZCA76U+Z4f1JdeEGqOFhcIFTyCOr/Ddz6wI5 //oW/mTs8bokAmK/V5QNBdPU4RIwokk6SItp4W8qWAXAalipjr13VKWRAKue7GdnjyJj +I6aPKGAKOol8hhsSq5a8CQtAi4iRGfVdDiLpNbWAQN3rolCpzf1BuGwp1CTqXdQkr+i EPXg== X-Gm-Message-State: APf1xPC+9jowF3IO3yIW1wGRE/zXR921eOYh7NB/x6T7XnQwyw4FI5/s MIFh5m2pwAx6MICdCc4HUQUJMA== X-Google-Smtp-Source: AH8x22493rRg9ODUNjYE/QF7hruvMruQZnFOncXVgkxrQIf1hjsKPXcvkcPd5+DmaJ0hocY8rrrPYQ== X-Received: by 10.101.66.193 with SMTP id l1mr1046549pgp.57.1519381468764; Fri, 23 Feb 2018 02:24:28 -0800 (PST) Received: from localhost ([122.167.232.138]) by smtp.gmail.com with ESMTPSA id z4sm3858558pgb.4.2018.02.23.02.24.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Feb 2018 02:24:28 -0800 (PST) From: Viresh Kumar To: Greg Kroah-Hartman Subject: [PATCH V7 09/13] boot_constraint: Add support for Hisilicon platforms Date: Fri, 23 Feb 2018 15:53:48 +0530 Message-Id: <0fc2fdf3744e1a0215a42c87759598db4160b659.1519380923.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.15.0.194.g9af6a3dea062 In-Reply-To: References: In-Reply-To: References: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180223_052441_092895_7F1F18EA X-CRM114-Status: GOOD ( 24.33 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nm@ti.com, Rajendra Nayak , Stephen Boyd , Viresh Kumar , s.hauer@pengutronix.de, linux-kernel@vger.kernel.org, xuwei5@hisilicon.com, olof@lixom.net, robdclark@gmail.com, robh+dt@kernel.org, fabio.estevam@nxp.com, Vincent Guittot , shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org, l.stach@pengutronix.de MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP This adds boot constraint support for Hisilicon platforms. Currently only one use case is supported: earlycon. One of the UART is enabled by the bootloader and is used for early console in the kernel. The boot constraint core handles it properly and removes constraints once the serial device is probed by its driver. This is tested on hi6220-hikey 96board. Cc: Wei Xu Signed-off-by: Viresh Kumar --- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/hisilicon/Kconfig | 15 +++ drivers/soc/hisilicon/Makefile | 3 + drivers/soc/hisilicon/boot_constraint.c | 158 ++++++++++++++++++++++++++++++++ 5 files changed, 178 insertions(+) create mode 100644 drivers/soc/hisilicon/Kconfig create mode 100644 drivers/soc/hisilicon/Makefile create mode 100644 drivers/soc/hisilicon/boot_constraint.c diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index c07b4a85253f..7fd6d59f15bd 100644 --- a/drivers/soc/Kconfig +++ b/drivers/soc/Kconfig @@ -5,6 +5,7 @@ source "drivers/soc/amlogic/Kconfig" source "drivers/soc/atmel/Kconfig" source "drivers/soc/bcm/Kconfig" source "drivers/soc/fsl/Kconfig" +source "drivers/soc/hisilicon/Kconfig" source "drivers/soc/imx/Kconfig" source "drivers/soc/mediatek/Kconfig" source "drivers/soc/qcom/Kconfig" diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index 40523577bdaa..2daf7c1a52ee 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile @@ -10,6 +10,7 @@ obj-$(CONFIG_ARCH_DOVE) += dove/ obj-$(CONFIG_MACH_DOVE) += dove/ obj-y += fsl/ obj-$(CONFIG_ARCH_GEMINI) += gemini/ +obj-$(CONFIG_ARCH_HISI) += hisilicon/ obj-$(CONFIG_ARCH_MXC) += imx/ obj-$(CONFIG_SOC_XWAY) += lantiq/ obj-y += mediatek/ diff --git a/drivers/soc/hisilicon/Kconfig b/drivers/soc/hisilicon/Kconfig new file mode 100644 index 000000000000..7247b13a60a2 --- /dev/null +++ b/drivers/soc/hisilicon/Kconfig @@ -0,0 +1,15 @@ +# +# Hisilicon Soc drivers +# + +menu "Hisilicon SoC drivers" + +config HISI_BOOT_CONSTRAINT + bool "Hisilicon Boot Constraints" + depends on ARCH_HISI + select DEV_BOOT_CONSTRAINT + default y + help + Say y here to enable Boot Constraints on Hisilicon platforms. + +endmenu diff --git a/drivers/soc/hisilicon/Makefile b/drivers/soc/hisilicon/Makefile new file mode 100644 index 000000000000..c63cb9b17bed --- /dev/null +++ b/drivers/soc/hisilicon/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-$(CONFIG_HISI_BOOT_CONSTRAINT) += boot_constraint.o diff --git a/drivers/soc/hisilicon/boot_constraint.c b/drivers/soc/hisilicon/boot_constraint.c new file mode 100644 index 000000000000..fa0b25d6ab8e --- /dev/null +++ b/drivers/soc/hisilicon/boot_constraint.c @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * This takes care of Hisilicon boot time device constraints, normally set by + * the Bootloader. + * + * Copyright (c) 2018 Linaro. + * Viresh Kumar + */ + +#include +#include +#include +#include + +static bool earlycon_boot_constraints_enabled __initdata; + +static int __init enable_earlycon_boot_constraints(char *str) +{ + earlycon_boot_constraints_enabled = true; + + return 0; +} + +__setup_param("earlycon", boot_constraint_earlycon, + enable_earlycon_boot_constraints, 0); +__setup_param("earlyprintk", boot_constraint_earlyprintk, + enable_earlycon_boot_constraints, 0); + + +struct hikey_machine_constraints { + struct dev_boot_constraint_of *dev_constraints; + unsigned int count; +}; + +static struct dev_boot_constraint_clk_info uart_iclk_info = { + .name = "uartclk", +}; + +static struct dev_boot_constraint_clk_info uart_pclk_info = { + .name = "apb_pclk", +}; + +static struct dev_boot_constraint hikey3660_uart_constraints[] = { + { + .type = DEV_BOOT_CONSTRAINT_CLK, + .data = &uart_iclk_info, + }, { + .type = DEV_BOOT_CONSTRAINT_CLK, + .data = &uart_pclk_info, + }, +}; + +static const char * const uarts_hikey3660[] = { + "serial@fff32000", /* UART 6 */ +}; + +static struct dev_boot_constraint_of hikey3660_dev_constraints[] = { + { + .compat = "arm,pl011", + .constraints = hikey3660_uart_constraints, + .count = ARRAY_SIZE(hikey3660_uart_constraints), + + .dev_names = uarts_hikey3660, + .dev_names_count = ARRAY_SIZE(uarts_hikey3660), + }, +}; + +static struct hikey_machine_constraints hikey3660_constraints = { + .dev_constraints = hikey3660_dev_constraints, + .count = ARRAY_SIZE(hikey3660_dev_constraints), +}; + +static const char * const uarts_hikey6220[] = { + "uart@f7113000", /* UART 3 */ +}; + +static struct dev_boot_constraint_of hikey6220_dev_constraints[] = { + { + .compat = "arm,pl011", + .constraints = hikey3660_uart_constraints, + .count = ARRAY_SIZE(hikey3660_uart_constraints), + + .dev_names = uarts_hikey6220, + .dev_names_count = ARRAY_SIZE(uarts_hikey6220), + }, +}; + +static struct hikey_machine_constraints hikey6220_constraints = { + .dev_constraints = hikey6220_dev_constraints, + .count = ARRAY_SIZE(hikey6220_dev_constraints), +}; + +static struct dev_boot_constraint hikey3798cv200_uart_constraints[] = { + { + .type = DEV_BOOT_CONSTRAINT_CLK, + .data = &uart_pclk_info, + }, +}; + +static const char * const uarts_hikey3798cv200[] = { + "serial@8b00000", /* UART 0 */ +}; + +static struct dev_boot_constraint_of hikey3798cv200_dev_constraints[] = { + { + .compat = "arm,pl011", + .constraints = hikey3798cv200_uart_constraints, + .count = ARRAY_SIZE(hikey3798cv200_uart_constraints), + + .dev_names = uarts_hikey3798cv200, + .dev_names_count = ARRAY_SIZE(uarts_hikey3798cv200), + }, +}; + +static struct hikey_machine_constraints hikey3798cv200_constraints = { + .dev_constraints = hikey3798cv200_dev_constraints, + .count = ARRAY_SIZE(hikey3798cv200_dev_constraints), +}; + +static const struct of_device_id machines[] __initconst = { + { .compatible = "hisilicon,hi3660", .data = &hikey3660_constraints }, + { .compatible = "hisilicon,hi3798cv200", .data = &hikey3798cv200_constraints }, + { .compatible = "hisilicon,hi6220", .data = &hikey6220_constraints }, + { } +}; + +static int __init hikey_constraints_init(void) +{ + const struct hikey_machine_constraints *constraints; + const struct of_device_id *match; + struct device_node *np; + + if (!earlycon_boot_constraints_enabled) + return 0; + + np = of_find_node_by_path("/"); + if (!np) + return -ENODEV; + + match = of_match_node(machines, np); + of_node_put(np); + + if (!match) + return 0; + + constraints = match->data; + + dev_boot_constraint_add_deferrable_of(constraints->dev_constraints, + constraints->count); + + return 0; +} + +/* + * The amba-pl011 driver registers itself from arch_initcall level. Setup the + * serial boot constraints before that in order not to miss any boot messages. + */ +postcore_initcall_sync(hikey_constraints_init);