All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: <Gireesh.Hiremath@in.bosch.com>
To: <u-boot@lists.denx.de>, <Gireesh.Hiremath@in.bosch.com>,
	<trini@konsulko.com>
Cc: <sjoerd.simons@collabora.co.uk>,
	<VinayKumar.Shettar@in.bosch.com>,
	<Govindaraji.Sivanantham@in.bosch.com>
Subject: [PATCH v4 16/18] am335x, guardian: software update available status is stored in AM3352 RTC scracth register
Date: Fri, 11 Jun 2021 16:13:48 +0000	[thread overview]
Message-ID: <20210611161350.2141-17-Gireesh.Hiremath@in.bosch.com> (raw)
In-Reply-To: <20210611161350.2141-1-Gireesh.Hiremath@in.bosch.com>

From: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>

RTC second scratch register[32-bit]:
  -zero byte hold boot count value
  -first byte hold update available state
  -second byte hold version
  -third byte hold magic number

Signed-off-by: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>

Gbp-Pq: Topic apertis/guardian
Gbp-Pq: Name am335x-guardian-software-update-available-status-is-store.patch
---
 drivers/bootcount/Kconfig           | 34 +++++++++++++++--
 drivers/bootcount/Makefile          |  1 +
 drivers/bootcount/bootcount_nvmem.c | 57 +++++++++++++++++++++++++++++
 3 files changed, 89 insertions(+), 3 deletions(-)
 create mode 100644 drivers/bootcount/bootcount_nvmem.c

diff --git a/drivers/bootcount/Kconfig b/drivers/bootcount/Kconfig
index b5ccea0d9c..0de2b7bd78 100644
--- a/drivers/bootcount/Kconfig
+++ b/drivers/bootcount/Kconfig
@@ -42,6 +42,25 @@ config BOOTCOUNT_AM33XX
 	  This requires the RTC clocks, etc, to be enabled prior to use and
 	  not all boards with this IP block on it will have the RTC in use.
 
+config BOOTCOUNT_AM33XX_NVMEM
+	bool "Boot counter in AM33XX RTC IP block with upgrade_available flag"
+	depends on AM33XX
+        select SPL_AM33XX_ENABLE_RTC32K_OSC if AM33XX
+	help
+	  Add support for maintaining bootcount,upgrade_available,
+	  version and BOOTMAGIC in a AM33xx RTC IP block
+	  scratch register2.
+
+	  A bootcount driver for the RTC IP block found on many TI platforms.
+	  This requires the RTC clocks, etc, to be enabled prior to use and
+	  not all boards with this IP block on it will have the RTC in use.
+
+	  If there is upgrade in software then "upgrade_available" is 1,
+	  "bootcount" is incremented otherwise "upgrade_available" and
+	  "bootcount" is  always 0. So the Userspace Application must set
+	  the "upgrade_available" and "bootcount" variable to 0, if a boot
+	  was successfully.
+
 config BOOTCOUNT_ENV
 	bool "Boot counter in environment"
 	help
@@ -177,16 +196,25 @@ config SYS_BOOTCOUNT_EXT_NAME
 
 config SYS_BOOTCOUNT_ADDR
 	hex "RAM address used for reading and writing the boot counter"
-	default 0x44E3E000 if BOOTCOUNT_AM33XX
+	default 0x44E3E000 if BOOTCOUNT_AM33XX || BOOTCOUNT_AM33XX_NVMEM
 	default 0xE0115FF8 if ARCH_LS1043A || ARCH_LS1021A
 	depends on BOOTCOUNT_AM33XX || BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \
-		   BOOTCOUNT_I2C
+		   BOOTCOUNT_I2C || BOOTCOUNT_AM33XX_NVMEM
 	help
 	  Set the address used for reading and writing the boot counter.
 
 config SYS_BOOTCOUNT_MAGIC
 	hex "Magic value for the boot counter"
-	default 0xB001C041
+	default 0xB001C041 if BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \
+			      BOOTCOUNT_AM33XX || BOOTCOUNT_ENV || \
+			      BOOTCOUNT_RAM || BOOTCOUNT_I2C || \
+			      BOOTCOUNT_AT91 || DM_BOOTCOUNT
+	default 0xB0 if BOOTCOUNT_AM33XX_NVMEM
+	depends on BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \
+		   BOOTCOUNT_AM33XX || BOOTCOUNT_ENV || \
+		   BOOTCOUNT_RAM || BOOTCOUNT_I2C || \
+		   BOOTCOUNT_AT91 || DM_BOOTCOUNT || \
+		   BOOTCOUNT_AM33XX_NVMEM
 	help
 	  Set the magic value used for the boot counter.
 
diff --git a/drivers/bootcount/Makefile b/drivers/bootcount/Makefile
index 51d860b00e..12658ffdce 100644
--- a/drivers/bootcount/Makefile
+++ b/drivers/bootcount/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_BOOTCOUNT_RAM)	+= bootcount_ram.o
 obj-$(CONFIG_BOOTCOUNT_ENV)	+= bootcount_env.o
 obj-$(CONFIG_BOOTCOUNT_I2C)	+= bootcount_i2c.o
 obj-$(CONFIG_BOOTCOUNT_EXT)	+= bootcount_ext.o
+obj-$(CONFIG_BOOTCOUNT_AM33XX_NVMEM)	+= bootcount_nvmem.o
 
 obj-$(CONFIG_DM_BOOTCOUNT)      += bootcount-uclass.o
 obj-$(CONFIG_DM_BOOTCOUNT_RTC)  += rtc.o
diff --git a/drivers/bootcount/bootcount_nvmem.c b/drivers/bootcount/bootcount_nvmem.c
new file mode 100644
index 0000000000..5f266d5ec8
--- /dev/null
+++ b/drivers/bootcount/bootcount_nvmem.c
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2011
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ * (C) Copyright 2018 Robert Bosch Power Tools GmbH.
+ *
+ * A bootcount driver for the RTC IP block found on many TI platforms.
+ * This requires the RTC clocks, etc, to be enabled prior to use and
+ * not all boards with this IP block on it will have the RTC in use.
+ */
+
+#include <bootcount.h>
+#include <asm/davinci_rtc.h>
+
+#define	BC_VERSION	2
+
+void bootcount_store(ulong bootcount)
+{
+	u8 upgrade_available = 0;
+	ulong val = 0;
+	struct davinci_rtc *reg =
+		(struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
+
+	val = raw_bootcount_load(&reg->scratch2);
+	upgrade_available = (val >> 8) & 0x000000ff;
+
+	/* Only update bootcount during upgrade process */
+	if (!upgrade_available)
+		bootcount = 0;
+
+	val = (bootcount & 0x000000ff) |
+	      (upgrade_available << 8) |
+	      (BC_VERSION << 16) |
+	      (CONFIG_SYS_BOOTCOUNT_MAGIC << 24);
+
+	/*
+	 * write RTC kick registers to enable write
+	 * for RTC Scratch registers. Scratch register 2 is
+	 * used for bootcount value.
+	 */
+	writel(RTC_KICK0R_WE, &reg->kick0r);
+	writel(RTC_KICK1R_WE, &reg->kick1r);
+	raw_bootcount_store(&reg->scratch2, val);
+}
+
+ulong bootcount_load(void)
+{
+	unsigned long val = 0;
+	struct davinci_rtc *reg =
+		(struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
+
+	val = raw_bootcount_load(&reg->scratch2);
+	if ((val >> 24) != CONFIG_SYS_BOOTCOUNT_MAGIC)
+		return 0;
+	else
+		return val & 0x000000ff;
+}
-- 
2.20.1


  parent reply	other threads:[~2021-06-11 16:17 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-11 16:13 [PATCH v4 00/18] am335x, guardian: update board specific changes Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 01/18] configs: am335x_guardian: Enable clock driver Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 02/18] am335x, guardian: mem: Add board dependent mem values Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 03/18] configs: am335x_guardian: add ubi fastmap support Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 04/18] am335x, guardian: set tftp_load_addr in environment Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 05/18] configs: am335x_guardian: add memtest configs Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 06/18] am335x, guardian: Update pinmux configuration Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 07/18] am335x, guardian: set environment variable autoload to no Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 08/18] am335x, guardian: code cleanup and boot optimization Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 09/18] configs: am335x_guardian: set boot delay Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 10/18] configs: am335x_guardian: disable spl command Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 11/18] am335x, guardian: update swi logic Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 12/18] am335x, guardian: Enable backlight Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 13/18] configs: am335x_guardian: Enable display config Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 14/18] drivers: video: hx8238 fix build bug Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 15/18] am335x, guardian: Enable panel driver Himax HX8238D Gireesh.Hiremath
2021-06-11 16:13 ` Gireesh.Hiremath [this message]
2021-06-11 16:13 ` [PATCH v4 17/18] configs: am335x_guardian: Enable bootcount nvmem support Gireesh.Hiremath
2021-06-11 16:13 ` [PATCH v4 18/18] configs: am335x_guardian: add register maps support Gireesh.Hiremath
2021-07-14  6:52 ` [PATCH v4 00/18] am335x, guardian: update board specific changes Lokesh Vutla

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210611161350.2141-17-Gireesh.Hiremath@in.bosch.com \
    --to=gireesh.hiremath@in.bosch.com \
    --cc=Govindaraji.Sivanantham@in.bosch.com \
    --cc=VinayKumar.Shettar@in.bosch.com \
    --cc=sjoerd.simons@collabora.co.uk \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.