All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] Add update available flag along with bootcount
@ 2021-01-06 15:32 Gireesh.Hiremath at in.bosch.com
  2021-01-06 15:32 ` [PATCH 1/1] am335x, guardian: software update available status is stored in AM3352 RTC scracth register Gireesh.Hiremath at in.bosch.com
  0 siblings, 1 reply; 3+ messages in thread
From: Gireesh.Hiremath at in.bosch.com @ 2021-01-06 15:32 UTC (permalink / raw
  To: u-boot

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

By adding update_avalibale flag we wanted control the increment of
bootcount, update_available flag is set from user space when there is
upgrade in software which allow to increment of bootcount, otherwise no
increment in the bootcount. Update_available and bootcount will be
cleared after every successful boot from user space

version byte to handle the version number. to provide backward
compatibility initial version number is 2.

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

Gireesh Hiremath (1):
  am335x, guardian: software update available status is stored in AM3352
    RTC scracth register

 configs/am335x_guardian_defconfig   |  1 +
 drivers/bootcount/Kconfig           | 27 ++++++++++++--
 drivers/bootcount/Makefile          |  1 +
 drivers/bootcount/bootcount_nvmem.c | 57 +++++++++++++++++++++++++++++
 4 files changed, 83 insertions(+), 3 deletions(-)
 create mode 100644 drivers/bootcount/bootcount_nvmem.c

-- 
2.20.1

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/1] am335x, guardian: software update available status is stored in AM3352 RTC scracth register
  2021-01-06 15:32 [PATCH 0/1] Add update available flag along with bootcount Gireesh.Hiremath at in.bosch.com
@ 2021-01-06 15:32 ` Gireesh.Hiremath at in.bosch.com
  2021-01-17 17:08   ` Lokesh Vutla
  0 siblings, 1 reply; 3+ messages in thread
From: Gireesh.Hiremath at in.bosch.com @ 2021-01-06 15:32 UTC (permalink / raw
  To: u-boot

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
---
 configs/am335x_guardian_defconfig   |  1 +
 drivers/bootcount/Kconfig           | 27 ++++++++++++--
 drivers/bootcount/Makefile          |  1 +
 drivers/bootcount/bootcount_nvmem.c | 57 +++++++++++++++++++++++++++++
 4 files changed, 83 insertions(+), 3 deletions(-)
 create mode 100644 drivers/bootcount/bootcount_nvmem.c

diff --git a/configs/am335x_guardian_defconfig b/configs/am335x_guardian_defconfig
index b5d8d80d14..c8336a8256 100644
--- a/configs/am335x_guardian_defconfig
+++ b/configs/am335x_guardian_defconfig
@@ -71,6 +71,7 @@ CONFIG_VERSION_VARIABLE=y
 CONFIG_BOOTP_SEND_HOSTNAME=y
 CONFIG_SPL_DM=y
 CONFIG_BOOTCOUNT_LIMIT=y
+CONFIG_BOOTCOUNT_AM33XX_NVMEM=y
 CONFIG_LED=y
 CONFIG_LED_GPIO=y
 CONFIG_MISC=y
diff --git a/drivers/bootcount/Kconfig b/drivers/bootcount/Kconfig
index b5ccea0d9c..d543061233 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,18 @@ 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_AM33XX
+	default 0xB0 if BOOTCOUNT_AM33XX_NVMEM
+	depends on BOOTCOUNT_AM33XX || 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 at 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

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 1/1] am335x, guardian: software update available status is stored in AM3352 RTC scracth register
  2021-01-06 15:32 ` [PATCH 1/1] am335x, guardian: software update available status is stored in AM3352 RTC scracth register Gireesh.Hiremath at in.bosch.com
@ 2021-01-17 17:08   ` Lokesh Vutla
  0 siblings, 0 replies; 3+ messages in thread
From: Lokesh Vutla @ 2021-01-17 17:08 UTC (permalink / raw
  To: u-boot



On 06/01/21 9:02 pm, Gireesh.Hiremath at in.bosch.com wrote:
> 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

Hmm..not sure what this is..

Cover letter is not needed for a single patch btw.
> ---
>  configs/am335x_guardian_defconfig   |  1 +
>  drivers/bootcount/Kconfig           | 27 ++++++++++++--
>  drivers/bootcount/Makefile          |  1 +
>  drivers/bootcount/bootcount_nvmem.c | 57 +++++++++++++++++++++++++++++

Please split driver and defconfig changes.

>  4 files changed, 83 insertions(+), 3 deletions(-)
>  create mode 100644 drivers/bootcount/bootcount_nvmem.c
> 
> diff --git a/configs/am335x_guardian_defconfig b/configs/am335x_guardian_defconfig
> index b5d8d80d14..c8336a8256 100644
> --- a/configs/am335x_guardian_defconfig
> +++ b/configs/am335x_guardian_defconfig
> @@ -71,6 +71,7 @@ CONFIG_VERSION_VARIABLE=y
>  CONFIG_BOOTP_SEND_HOSTNAME=y
>  CONFIG_SPL_DM=y
>  CONFIG_BOOTCOUNT_LIMIT=y
> +CONFIG_BOOTCOUNT_AM33XX_NVMEM=y
>  CONFIG_LED=y
>  CONFIG_LED_GPIO=y
>  CONFIG_MISC=y
> diff --git a/drivers/bootcount/Kconfig b/drivers/bootcount/Kconfig
> index b5ccea0d9c..d543061233 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.
> +

Isn't it possible to re-use drivers/bootcount/bootcount_davinci.c?

Thanks and regards,
Lokesh


>  config BOOTCOUNT_ENV
>  	bool "Boot counter in environment"
>  	help
> @@ -177,16 +196,18 @@ 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_AM33XX
> +	default 0xB0 if BOOTCOUNT_AM33XX_NVMEM
> +	depends on BOOTCOUNT_AM33XX || 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 at 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;
> +}
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-01-17 17:08 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-06 15:32 [PATCH 0/1] Add update available flag along with bootcount Gireesh.Hiremath at in.bosch.com
2021-01-06 15:32 ` [PATCH 1/1] am335x, guardian: software update available status is stored in AM3352 RTC scracth register Gireesh.Hiremath at in.bosch.com
2021-01-17 17:08   ` Lokesh Vutla

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.