From: Junghoon Kim Date: Mon, 21 Aug 2017 02:04:32 +0000 (+0900) Subject: misc: add Tizen reboot notifier for passing reboot parameter X-Git-Tag: accepted/tizen/unified/20200709.164653~245 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=990d69bd5b1419ef3b1e84089e4764d207052464;p=platform%2Fkernel%2Flinux-rpi.git misc: add Tizen reboot notifier for passing reboot parameter To determine booting mode (e.g, fota or recovery) in u-boot side, reboot parameter should be passed through inform partition. Add Tizen reboot notifier for passing reboot parameter. Change-Id: I5830dcf58ec6905b0bc382599aa9ff1251f817d8 Signed-off-by: Junghoon Kim --- diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 62c3ec2..1e096ea 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -474,6 +474,22 @@ config PVPANIC a paravirtualized device provided by QEMU; it lets a virtual machine (guest) communicate panic events to the host. +config TIZEN_INFORM_REBOOT + bool "Tizen reboot parameter passing support" + default "n" + ---help--- + This enables support for passing reboot parameter through inform + partition. It is required to determine booting mode (e.g., fota or + normal). After passing reboot parameter, u-boot checks the contents + of inform file and then determines proper booting mode. + +config TIZEN_INFORM_PATH + depends on TIZEN_INFORM_REBOOT + string "Absolute path of inform file for passing reboot parameter" + ---help--- + This option determines the absolute path of inform file for passing + reboot parameter. + source "drivers/misc/c2port/Kconfig" source "drivers/misc/eeprom/Kconfig" source "drivers/misc/cb710/Kconfig" diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index dbca246..a31617a 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -58,3 +58,4 @@ obj-y += cardreader/ obj-$(CONFIG_PVPANIC) += pvpanic.o obj-$(CONFIG_HABANA_AI) += habanalabs/ obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o +obj-$(CONFIG_TIZEN_INFORM_REBOOT) += tizen-inform-reboot.o diff --git a/drivers/misc/tizen-inform-reboot.c b/drivers/misc/tizen-inform-reboot.c new file mode 100644 index 0000000..7a1f16f --- /dev/null +++ b/drivers/misc/tizen-inform-reboot.c @@ -0,0 +1,74 @@ +/* + * Tizen reboot parameter passing notifier + * + * Written by: Junghoon Kim + * + * Copyright (C) 2017 Samsung Electronics Co., Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include + +static int inform_reboot_notifier(struct notifier_block *nb, + unsigned long val, void *buf) +{ + char *cmd = buf; + char *filename = CONFIG_TIZEN_INFORM_PATH; + struct file *file; + int fd; + loff_t pos = 0; + mm_segment_t old_fs = get_fs(); + + set_fs(KERNEL_DS); + + fd = sys_open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0644); + if (fd >= 0) { + file = fget(fd); + if (file) { + if (cmd) { + if (!strncmp(cmd, "fota", 4)) + cmd = "upgr"; + else if (!strncmp(cmd, "recovery", 8)) + cmd = "rcvr"; + else + cmd = "ndef"; + } else + cmd = "norm"; + + vfs_write(file, cmd, strlen(cmd), &pos); + vfs_fsync(file, 0); + fput(file); + } + sys_close(fd); + /* to guarantee all file data and metadata sync */ + emergency_sync(); + } else { + pr_err("Reboot parameter passing is failed.\n" + "Inform file path should be described correctly in config.\n"); + } + + set_fs(old_fs); + + return NOTIFY_DONE; +} + +static struct notifier_block nb_inform_reboot_block = { + .notifier_call = inform_reboot_notifier +}; + +static int __init inform_reboot_init(void) +{ + /* to support reboot parameter passing */ + register_reboot_notifier(&nb_inform_reboot_block); + return 0; +} + +subsys_initcall(inform_reboot_init);