From patchwork Fri Apr 26 06:22:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qiang Zhao X-Patchwork-Id: 1091334 X-Patchwork-Delegate: prabhakar@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="r0JWNauu"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44r3rl2cL7z9s3l for ; Fri, 26 Apr 2019 16:23:03 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 045BCC21E2F; Fri, 26 Apr 2019 06:23:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1C1A6C21C3F; Fri, 26 Apr 2019 06:22:58 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 5A139C21C3F; Fri, 26 Apr 2019 06:22:57 +0000 (UTC) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140049.outbound.protection.outlook.com [40.107.14.49]) by lists.denx.de (Postfix) with ESMTPS id 69AABC21C2C for ; Fri, 26 Apr 2019 06:22:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xMnLeXrNzYWR/GQBsWApU+9J53Q9szNxYe3rL5kGVWM=; b=r0JWNauuQ9F+tu96B73bDdwkirTN5hHgJgzyh3BJmwrxTu5g8EKemxbFDVLAT4dmmqa3r3DEUslPRAyaelOwyyx7TKfJPHeuVXTHCOLnlrUK1ociqsaJeMWdxSC+I7FdZA+BiKHBag56DfjXLEJ28b1CmIsn8Ja0XKvmxTtCTVc= Received: from VI1PR04MB3247.eurprd04.prod.outlook.com (10.170.232.160) by VI1PR04MB3152.eurprd04.prod.outlook.com (10.170.229.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.12; Fri, 26 Apr 2019 06:22:54 +0000 Received: from VI1PR04MB3247.eurprd04.prod.outlook.com ([fe80::cd99:d9b2:d90a:6c2]) by VI1PR04MB3247.eurprd04.prod.outlook.com ([fe80::cd99:d9b2:d90a:6c2%2]) with mapi id 15.20.1835.010; Fri, 26 Apr 2019 06:22:54 +0000 From: Qiang Zhao To: York Sun Thread-Topic: [PATCH 1/2] watchdog: add sp805 watchdog support Thread-Index: AQHU+/h7rbGtR4Zs1USRSd0IhAtFhQ== Date: Fri, 26 Apr 2019 06:22:53 +0000 Message-ID: <20190426062430.48022-1-qiang.zhao@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: HK0PR03CA0084.apcprd03.prod.outlook.com (2603:1096:203:72::24) To VI1PR04MB3247.eurprd04.prod.outlook.com (2603:10a6:802:11::32) x-mailer: git-send-email 2.17.1 authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiang.zhao@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 495c303c-91d4-43bc-8973-08d6ca0f9d83 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:VI1PR04MB3152; x-ms-traffictypediagnostic: VI1PR04MB3152: x-microsoft-antispam-prvs: x-forefront-prvs: 001968DD50 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(376002)(366004)(39860400002)(346002)(136003)(189003)(199004)(81156014)(305945005)(44832011)(7736002)(81166006)(99286004)(8936002)(8676002)(186003)(25786009)(2906002)(14454004)(52116002)(4326008)(36756003)(478600001)(2616005)(6862004)(86362001)(476003)(6486002)(3846002)(97736004)(6116002)(102836004)(66476007)(53936002)(316002)(66066001)(66556008)(66946007)(64756008)(66446008)(256004)(50226002)(6506007)(486006)(71190400001)(6436002)(73956011)(71200400001)(386003)(68736007)(1076003)(54906003)(37006003)(5660300002)(14444005)(6636002)(26005)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3152; H:VI1PR04MB3247.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: UWNpT890AlPeRmzuYePggLUgXOmovVLxNLjt150hqJE5Orno56B9rgoeMEfgLxeSOPp1fr0aT1FTtIAFKwyMPRUCHahGf0xrqWfBXRe3I8rmynOmCVQxID1kqnXbm60MJDRQdnpAq4xvqFGH0TM67xyEmTdtnQUsAby0DPQ6aJ4CbrrpovPUQzJ8l6WtYIoPkQ94BxRK7fy5cBTlGtg4spDcFhPP7KlH2anm0OYOJ5IFLo31dnNkGu3O2+NYg4ZcL/Z8c06BDpjin7W8ImeASqdEYXXybqiLH10M50hYv+WjzO6P2tKQySGaXmuwkQqs5Vgi0HdaM3cMMuaYl9w3vphUOapa5iaAojxuUAiAyVa1tbzEiZnp/aEjoOfNg700z8iCQCs5K6ds7JmQ0aStcUn/06kBUB3WjoZ/4AbAsAE= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 495c303c-91d4-43bc-8973-08d6ca0f9d83 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Apr 2019 06:22:53.9380 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3152 Cc: "u-boot@lists.denx.de" Subject: [U-Boot] [PATCH 1/2] watchdog: add sp805 watchdog support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" sp805 is watchdog on some NXP layerscape SoCs, Now add its driver in uboot. Signed-off-by: Zhao Qiang --- MAINTAINERS | 1 + common/board_f.c | 2 +- drivers/watchdog/Kconfig | 8 +++++ drivers/watchdog/Makefile | 1 + drivers/watchdog/sp805_wdt.c | 70 ++++++++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 drivers/watchdog/sp805_wdt.c diff --git a/MAINTAINERS b/MAINTAINERS index 8f237128b2..e8e7a92802 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -410,6 +410,7 @@ FREESCALE QORIQ M: York Sun S: Maintained T: git git://git.denx.de/u-boot-fsl-qoriq.git +F: drivers/watchdog/sp805_wdt.c I2C M: Heiko Schocher diff --git a/common/board_f.c b/common/board_f.c index 88d770071c..06bfff6e50 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -91,7 +91,7 @@ static int init_func_watchdog_init(void) (defined(CONFIG_M68K) || defined(CONFIG_MICROBLAZE) || \ defined(CONFIG_SH) || defined(CONFIG_AT91SAM9_WATCHDOG) || \ defined(CONFIG_DESIGNWARE_WATCHDOG) || \ - defined(CONFIG_IMX_WATCHDOG)) + defined(CONFIG_IMX_WATCHDOG) || defined(CONFIG_WDT_SP805)) hw_watchdog_init(); puts(" Watchdog enabled\n"); # endif diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index b06c5447f6..9ca8c729b7 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -95,6 +95,14 @@ config WDT_ORION Select this to enable Orion watchdog timer, which can be found on some Marvell Armada chips. +config WDT_SP805 + bool "SP805 watchdog timer support" + depends on FSL_LAYERSCAPE + select HW_WATCHDOG + help + Select this to enable SP805 watchdog timer, which can be found on some + nxp layerscape chips. + config WDT_CDNS bool "Cadence watchdog timer support" depends on WDT diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index 19c631bb58..eb285bde24 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ -25,3 +25,4 @@ obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt.o obj-$(CONFIG_WDT_ORION) += orion_wdt.o obj-$(CONFIG_WDT_CDNS) += cdns_wdt.o obj-$(CONFIG_MPC8xx_WATCHDOG) += mpc8xx_wdt.o +obj-$(CONFIG_WDT_SP805) += sp805_wdt.o diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c new file mode 100644 index 0000000000..64604a09e7 --- /dev/null +++ b/drivers/watchdog/sp805_wdt.c @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Watchdog driver for SP805 on some Layerscape SoC + * + * Copyright 2019 NXP + */ + +#include +#include +#include +#include + +#define SP805_WDT_ADDR_BASE 0xc000000 +#define WDTLOAD 0x000 +#define WDTCONTROL 0x008 +#define WDTINTCLR 0x00C +#define WDTLOCK 0xC00 + +#define TIME_OUT_SECS 15 +#define SYS_FSL_WDT_CLK_DIV 16 +#define INT_ENABLE BIT(0) +#define RESET_ENABLE BIT(1) +#define UNLOCK 0x1ACCE551 +#define LOCK 0x00000001 +#define INT_MASK BIT(0) + +DECLARE_GLOBAL_DATA_PTR; + +void hw_watchdog_reset(void) +{ + writel(UNLOCK, SP805_WDT_ADDR_BASE + WDTLOCK); + writel(INT_MASK, SP805_WDT_ADDR_BASE + WDTINTCLR); + writel(LOCK, SP805_WDT_ADDR_BASE + WDTLOCK); + readl(SP805_WDT_ADDR_BASE + WDTLOCK); +} + +void hw_watchdog_init(void) +{ + u32 load_value; + /* sp805 runs counter with given value twice, so when the timeout is + * set 15s, the gd->bus_clk is less than 9162MHz, the load_value will + * not overflow. + */ + load_value = (TIME_OUT_SECS / 2) * (gd->bus_clk / SYS_FSL_WDT_CLK_DIV); + + writel(UNLOCK, SP805_WDT_ADDR_BASE + WDTLOCK); + writel(load_value, SP805_WDT_ADDR_BASE + WDTLOAD); + writel(INT_MASK, SP805_WDT_ADDR_BASE + WDTINTCLR); + writel(INT_ENABLE | RESET_ENABLE, SP805_WDT_ADDR_BASE + WDTCONTROL); + writel(LOCK, SP805_WDT_ADDR_BASE + WDTLOCK); + readl(SP805_WDT_ADDR_BASE + WDTLOCK); +} + +static int do_wdt_test(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + writel(UNLOCK, SP805_WDT_ADDR_BASE + WDTLOCK); + writel(INT_MASK, SP805_WDT_ADDR_BASE + WDTINTCLR); + writel(LOCK, SP805_WDT_ADDR_BASE + WDTLOCK); + readl(SP805_WDT_ADDR_BASE + WDTLOCK); + while (1) { + /* + * spin to test watchdog + */ + } + return 0; +} + +U_BOOT_CMD(wdt_test, 1, 1, do_wdt_test, "test watchdog", + "when run this command, the uboot will reset");