From patchwork Thu Oct 15 06:59:33 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 7402921 X-Patchwork-Delegate: horms@verge.net.au Return-Path: X-Original-To: patchwork-linux-sh@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D4558BEEA4 for ; Thu, 15 Oct 2015 06:59:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DA8422089F for ; Thu, 15 Oct 2015 06:59:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CE4A520852 for ; Thu, 15 Oct 2015 06:59:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753829AbbJOG7p (ORCPT ); Thu, 15 Oct 2015 02:59:45 -0400 Received: from kirsty.vergenet.net ([202.4.237.240]:36826 "EHLO kirsty.vergenet.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753794AbbJOG7p (ORCPT ); Thu, 15 Oct 2015 02:59:45 -0400 Received: from reginn.isobedori.kobe.vergenet.net (p2250-ipbfp1101kobeminato.hyogo.ocn.ne.jp [122.22.210.250]) by kirsty.vergenet.net (Postfix) with ESMTPA id C968A25B7A0; Thu, 15 Oct 2015 17:59:39 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verge.net.au; s=mail; t=1444892379; bh=tF1v7ggKZwplZf3Db7BGxHT+8MHDDzE9YsNlcstZiyg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IrltPLyWJs4hn+8BSOVCiGzahwjX56ExgtcKGZpkfIwKF49tPJwo5pZ9egg8qp2Eg Mo4d+bLTyTDwjRGSlYgmC0DGxlS4W2V8aR9J/pIHbUT2FWNCuOzdS2/QhliQCTzxEs fY6Hp3dRp9Fk3TH/87/ZGqjRYrkNJer+g+PXHojw= Received: by reginn.isobedori.kobe.vergenet.net (Postfix, from userid 7100) id 999EC9405AE; Thu, 15 Oct 2015 15:59:38 +0900 (JST) From: Simon Horman To: Laurent Pinchart Cc: linux-sh@vger.kernel.org, Magnus Damm , Simon Horman Subject: [PATCH/RFC 2/6] boot-mode-reg: Add R-Car Gen2 driver Date: Thu, 15 Oct 2015 15:59:33 +0900 Message-Id: <1444892377-10170-3-git-send-email-horms+renesas@verge.net.au> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1444892377-10170-1-git-send-email-horms+renesas@verge.net.au> References: <1444892377-10170-1-git-send-email-horms+renesas@verge.net.au> Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,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 Boot mode register driver for R-Car Gen2. If running on a supported platform it reads the boot mode register and records it using the boot mode register infrastructure established by an earlier patch. rcar_gen2_init_boot_mode() is exported allow it to be explicitly called in cases where the boot mode register is needed before init calls are made. Signed-off-by: Simon Horman --- drivers/misc/boot-mode-reg/Kconfig | 8 +++++ drivers/misc/boot-mode-reg/Makefile | 1 + drivers/misc/boot-mode-reg/rcar-gen2.c | 61 ++++++++++++++++++++++++++++++++++ include/misc/boot-mode-reg.h | 3 ++ 4 files changed, 73 insertions(+) create mode 100644 drivers/misc/boot-mode-reg/rcar-gen2.c diff --git a/drivers/misc/boot-mode-reg/Kconfig b/drivers/misc/boot-mode-reg/Kconfig index 806eba24238f..4731edf8a9db 100644 --- a/drivers/misc/boot-mode-reg/Kconfig +++ b/drivers/misc/boot-mode-reg/Kconfig @@ -9,3 +9,11 @@ config BOOT_MODE_REG_CORE help Say Y here to allow support for drivers to read boot mode registers and make the value available to other subsystems. + +config BOOT_MODE_REG_RCAR_GEN2 + tristate "Boot Mode Register Driver for Renesas R-Car Gen2 SoCs" + default n + select BOOT_MODE_REG_CORE + help + Say Y here to allow support for reading the boot mode register + on Renesas R-Car Gen2 SoCs. diff --git a/drivers/misc/boot-mode-reg/Makefile b/drivers/misc/boot-mode-reg/Makefile index 19134b20a7f1..d097fd0164aa 100644 --- a/drivers/misc/boot-mode-reg/Makefile +++ b/drivers/misc/boot-mode-reg/Makefile @@ -4,3 +4,4 @@ # obj-$(CONFIG_BOOT_MODE_REG_CORE) += core.o +obj-$(CONFIG_BOOT_MODE_REG_RCAR_GEN2) += rcar-gen2.o diff --git a/drivers/misc/boot-mode-reg/rcar-gen2.c b/drivers/misc/boot-mode-reg/rcar-gen2.c new file mode 100644 index 000000000000..0f1a06fcf094 --- /dev/null +++ b/drivers/misc/boot-mode-reg/rcar-gen2.c @@ -0,0 +1,61 @@ +/* + * R-Car Gen2 Boot Mode Register Driver + * + * Copyright (C) 2015 Simon Horman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include + +#include + +#define MODEMR 0xe6160060 + +static int __init rcar_gen2_read_mode_pins(void) +{ + void __iomem *modemr; + int err = -ENOMEM; + static u32 mode; + + modemr = ioremap_nocache(MODEMR, 4); + if (!modemr) { + pr_err("failed to map boot mode register"); + goto err; + } + mode = ioread32(modemr); + iounmap(modemr); + + err = boot_mode_reg_set(mode); +err: + if (err) + pr_err("failed to initialise boot mode"); + return err; +} + +int __init rcar_gen2_init_boot_mode(void) +{ + if (of_machine_is_compatible("renesas,r8a7790") || + of_machine_is_compatible("renesas,r8a7791") || + of_machine_is_compatible("renesas,r8a7792") || + of_machine_is_compatible("renesas,r8a7793") || + of_machine_is_compatible("renesas,r8a7794")) + return rcar_gen2_read_mode_pins(); + + return 0; +} +EXPORT_SYMBOL_GPL(boot_mode_set); +early_initcall(rcar_gen2_init_boot_mode); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Simon Horman "); +MODULE_DESCRIPTION("R-Car Gen2 Boot Mode Register Driver"); diff --git a/include/misc/boot-mode-reg.h b/include/misc/boot-mode-reg.h index 34ee653279a4..f8fea0ea5a3e 100644 --- a/include/misc/boot-mode-reg.h +++ b/include/misc/boot-mode-reg.h @@ -21,4 +21,7 @@ int boot_mode_reg_get(u32 *mode); int boot_mode_reg_set(u32 mode); +/* Allow explicit initialisation before initcalls */ +int rcar_gen2_init_boot_mode(void); + #endif