diff options
Diffstat (limited to 'common/mentor-swupdate')
27 files changed, 1036 insertions, 0 deletions
diff --git a/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/Makefile.core.def b/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/Makefile.core.def new file mode 100644 index 00000000..8d562c7f --- /dev/null +++ b/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/Makefile.core.def @@ -0,0 +1,7 @@ +AutoGen definitions Makefile.tpl; + +module = { + name = amd-wdt; + common = contrib/grub-core/amd-wdt/amd_wdt.h; + common = contrib/grub-core/amd-wdt/amd_wdt.c; +}; diff --git a/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/amd_wdt.c b/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/amd_wdt.c new file mode 100644 index 00000000..9d2e8317 --- /dev/null +++ b/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/amd_wdt.c @@ -0,0 +1,341 @@ +/* amd_wdt.c - AMD Watchdog Driver and API for grub cfg & console */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2019 Mentor Graphics, a Siemens business + * + * GRUB 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, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB 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. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + * + * Author: Arsalan H. Awan <ArsalanHAwan@github> + * Email: Arsalan_Awan@mentor.com + */ + +#include <grub/types.h> +#include <grub/misc.h> +#include <grub/mm.h> +#include <grub/pci.h> +#include <grub/err.h> +#include <grub/dl.h> +#include <grub/extcmd.h> +#include <grub/i18n.h> +#include "amd_wdt.h" + +#define PCI_VENDOR_ID_AMD 0x1022 + +//#define AMD_WDT_DEBUG + +GRUB_MOD_LICENSE ("GPLv3+"); + +static struct +{ + grub_uint8_t *ptr; + grub_uint8_t fired; + int mapped; + grub_uint32_t base; + grub_pci_device_t dev; +} watchdog; + +static int found = 0; + +static void +writel (grub_uint32_t val, grub_uint8_t reg) +{ + watchdog.ptr[reg] = val & 0xff; + watchdog.ptr[reg + 1] = (val >> 8) & 0xff; + watchdog.ptr[reg + 2] = (val >> 16) & 0xff; + watchdog.ptr[reg + 3] = (val >> 24) & 0xff; +} + +static grub_uint32_t +readl (grub_uint8_t reg) +{ + return watchdog.ptr[reg] + + (watchdog.ptr[reg + 1] << 8) + + (watchdog.ptr[reg + 2] << 16) + + (watchdog.ptr[reg + 3] << 24); +} + +static void +amd_wdt_start (void) +{ + grub_uint32_t val; + /* Start the watchdog timer */ + val = readl (AMD_WDT_CONTROL(0)); + val |= AMD_WDT_START_STOP_BIT; + writel (val, AMD_WDT_CONTROL(0)); +} + +static void +amd_wdt_stop (void) +{ + grub_uint32_t val; + /* Stop the watchdog timer */ + val = readl (AMD_WDT_CONTROL(0)); + val &= ~AMD_WDT_START_STOP_BIT; + writel (val, AMD_WDT_CONTROL(0)); +} + +static void +amd_wdt_ping (void) +{ + grub_uint32_t val; + /* Trigger/Ping watchdog timer */ + val = readl (AMD_WDT_CONTROL(0)); + val |= AMD_WDT_TRIGGER_BIT; + writel (val, AMD_WDT_CONTROL(0)); +} + +static grub_uint16_t +amd_wdt_get_time (void) +{ + /* Read watchdog COUNT register */ + return readl (AMD_WDT_COUNT(0)) & AMD_WDT_COUNT_MASK; +} + +static void +amd_wdt_set_time (grub_uint32_t t) +{ + if (t < AMD_WDT_MIN_TIMEOUT) + t = AMD_WDT_MIN_TIMEOUT; + else if (t > AMD_WDT_MAX_TIMEOUT) + t = AMD_WDT_MAX_TIMEOUT; + + /* Write new timeout value to watchdog COUNT register */ + writel (t, AMD_WDT_COUNT(0)); +} + +static void +amd_wdt_enable (void) +{ + grub_uint8_t val; + /* Enable watchdog timer */ + grub_outb(AMD_PM_WATCHDOG_EN_REG, AMD_IO_PM_INDEX_REG); + val = grub_inb(AMD_IO_PM_DATA_REG); + val |= AMD_PM_WATCHDOG_TIMER_EN; + grub_outb(val, AMD_IO_PM_DATA_REG); +} + +static void +amd_wdt_disable (void) +{ + grub_uint8_t val; + /* Disable watchdog timer */ + grub_outb(AMD_PM_WATCHDOG_EN_REG, AMD_IO_PM_INDEX_REG); + val = grub_inb(AMD_IO_PM_DATA_REG); + val &= ~AMD_PM_WATCHDOG_TIMER_EN; + grub_outb(val, AMD_IO_PM_DATA_REG); +} + +static void +amd_wdt_set_resolution (grub_uint8_t freq) +{ + grub_uint8_t val; + /* Set the watchdog timer resolution */ + grub_outb(AMD_PM_WATCHDOG_CONFIG_REG, AMD_IO_PM_INDEX_REG); + val = grub_inb(AMD_IO_PM_DATA_REG); + /* Clear the previous frequency setting, if any */ + val &= ~AMD_PM_WATCHDOG_CONFIG_MASK; + /* Set the new frequency value */ + val |= freq; + grub_outb(val, AMD_IO_PM_DATA_REG); +} + +static void +amd_wdt_set_timeout_action (const char * action) +{ + grub_uint32_t val; + val = readl (AMD_WDT_CONTROL(0)); + + /* + * Set the watchdog timeout action. + * + * If action is specified anything other than reboot or shutdown, + * we default it to reboot. + */ + if (grub_strncmp(action, "shutdown", 8) == 0) + val |= AMD_WDT_ACTION_RESET_BIT; + else + val &= ~AMD_WDT_ACTION_RESET_BIT; +} + +static grub_uint8_t +amd_wdt_check_fired (void) +{ + grub_uint32_t val; + /* Read watchdog fired bit */ + val = readl (AMD_WDT_CONTROL(0)); + return val & AMD_WDT_FIRED_BIT; +} + +static grub_err_t +grub_cmd_amd_wdt (grub_extcmd_context_t ctxt __attribute__ ((unused)), + int argc, char **args) +{ + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("usage: amd-wdt <command>\ncommands: enable disable start stop ping getstatus gettime settime")); + + if (grub_strcasecmp (args[0], "enable") == 0) + amd_wdt_enable (); + else if (grub_strcasecmp (args[0], "disable") == 0) + amd_wdt_disable (); + else if (grub_strcasecmp (args[0], "start") == 0) + { + amd_wdt_start (); + amd_wdt_ping (); + } + else if (grub_strcasecmp (args[0], "stop") == 0) + amd_wdt_stop (); + else if (grub_strcasecmp (args[0], "ping") == 0) + amd_wdt_ping (); + else if (grub_strcasecmp (args[0], "getstatus") == 0) + { + grub_printf ("%d", watchdog.fired); + return watchdog.fired; + } + else if (grub_strcasecmp (args[0], "gettime") == 0) + grub_printf ("%d", amd_wdt_get_time ()); + else if (grub_strcasecmp (args[0], "settime") == 0) + { + amd_wdt_set_time (grub_strtol(args[1], 0, 0)); + amd_wdt_start (); + amd_wdt_ping (); + amd_wdt_stop (); + } + else + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("error: unknown command")); + + return GRUB_ERR_NONE; +} + +/* Helper for finding AMD WDT on the PCI bus */ +static int +find_wdt (grub_pci_device_t dev, + grub_pci_id_t pciid __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + grub_pci_address_t addr; + grub_uint32_t device_id; + grub_uint32_t vendor_id; + +#ifdef AMD_WDT_DEBUG + grub_printf ("bus=%d, device=%d, function=%d\n", dev.bus, dev.device, dev.function); +#endif + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_DEVICE); + device_id = grub_pci_read_word (addr); + +#ifdef AMD_WDT_DEBUG + grub_printf ("addr GRUB_PCI_REG_DEVICE = 0x%x\n", addr); +#endif + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_VENDOR); + vendor_id = grub_pci_read_word (addr); + +#ifdef AMD_WDT_DEBUG + grub_printf ("addr GRUB_PCI_REG_VENDOR = 0x%x\n", addr); + + grub_printf ("PCI_DEVICE_ID = 0x%x | 0x%x, PCI_VENDOR_ID = 0x%x | 0x%x\n", device_id, PCI_DEVICE_ID_AMD_CARRIZO_SMBUS, vendor_id, PCI_VENDOR_ID_AMD); +#endif + + if (device_id == PCI_DEVICE_ID_AMD_CARRIZO_SMBUS && vendor_id == PCI_VENDOR_ID_AMD) + { + watchdog.base = AMD_ACPI_MMIO_BASE + AMD_WDT_MEM_MAP_OFFSET; + +#ifdef AMD_WDT_DEBUG + grub_printf ("watchdog.base = 0x%x\n", watchdog.base); + + for (grub_uint16_t i=0; i<0x100; i+=4) + { + addr = grub_pci_make_address (dev, i); + grub_printf ("0x%x: 0x%x\n", i, grub_pci_read (addr)); + } +#endif + + watchdog.dev = dev; + found = 1; + return 1; + } + return 0; +} + +static grub_err_t +amd_wdt_init (void) +{ + grub_pci_iterate (find_wdt, NULL); + if (!found) + return grub_error (GRUB_ERR_IO, "Couldn't find watchdog timer"); + + watchdog.ptr = (void *) grub_pci_device_map_range (watchdog.dev, + watchdog.base, + AMD_WDT_MEM_MAP_SIZE); + + watchdog.mapped = 1; + +#ifdef AMD_WDT_DEBUG + grub_printf ("watchdog.ptr = %p\n", watchdog.ptr); + + for (grub_uint16_t i=0; i<AMD_WDT_MEM_MAP_SIZE; i++) + { + grub_outb(i, AMD_IO_PM_INDEX_REG); + grub_printf ("watchdog reg[%d] = 0x%x\n", i, grub_inb(AMD_IO_PM_DATA_REG)); + } +#endif + + watchdog.fired = amd_wdt_check_fired (); + + amd_wdt_enable (); + amd_wdt_set_resolution (AMD_PM_WATCHDOG_1SEC_RES); + amd_wdt_set_timeout_action (_("reboot")); + amd_wdt_stop (); + amd_wdt_set_time (AMD_WDT_DEFAULT_TIMEOUT); + + grub_printf ("AMD Watchdog setup complete!\n"); + + return GRUB_ERR_NONE; +} + +static grub_err_t +amd_wdt_fini (void) +{ + if (watchdog.mapped) + grub_pci_device_unmap_range (watchdog.dev, + watchdog.ptr, + AMD_WDT_MEM_MAP_SIZE); + + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(amd-wdt) +{ + amd_wdt_init (); + + if (watchdog.mapped) + { + grub_printf ("watchdog reboot %sdetected\n", watchdog.fired ? "" : "not "); + + cmd = grub_register_extcmd ("amd-wdt", grub_cmd_amd_wdt, 0, 0, + N_("AMD Watchdog Timer"), 0); + } +} + +GRUB_MOD_FINI(amd-wdt) +{ + amd_wdt_fini (); + + if (watchdog.mapped) + grub_unregister_extcmd (cmd); +} diff --git a/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/amd_wdt.h b/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/amd_wdt.h new file mode 100644 index 00000000..db7c49a1 --- /dev/null +++ b/common/mentor-swupdate/recipes-bsp/grub/amd-wdt/amd_wdt.h @@ -0,0 +1,76 @@ +/***************************************************************************** +* +* Copyright (c) 2014, Advanced Micro Devices, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of Advanced Micro Devices, Inc. nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* +***************************************************************************/ + +#ifndef _AMD_WDT_H_ +#define _AMD_WDT_H_ + +/* Module and version information */ +#define WDT_VERSION "1.0" +#define WDT_MODULE_NAME "AMD watchdog timer" +#define WDT_DRIVER_NAME WDT_MODULE_NAME ", v" WDT_VERSION + +#define AMD_WDT_DEFAULT_TIMEOUT 60 /* 60 units default heartbeat. */ +#define AMD_WDT_MIN_TIMEOUT 0x0001 /* minimum timeout value */ +#define AMD_WDT_MAX_TIMEOUT 0xFFFF /* maximum timeout value */ +#define MAX_LENGTH (8 + 1) /* shutdown has 8 characters + NULL character */ + +/* Watchdog register definitions */ +#define AMD_ACPI_MMIO_BASE 0xFED80000 +#define AMD_WDT_MEM_MAP_OFFSET 0xB00 +#define AMD_WDT_MEM_MAP_SIZE 0x100 + +#define AMD_WDT_CONTROL(base) ((base) + 0x00) /* Watchdog Control */ + #define AMD_WDT_START_STOP_BIT (1 << 0) + #define AMD_WDT_FIRED_BIT (1 << 1) + #define AMD_WDT_ACTION_RESET_BIT (1 << 2) + #define AMD_WDT_DISABLE_BIT (1 << 3) + /* 6:4 bits Reserved */ + #define AMD_WDT_TRIGGER_BIT (1 << 7) +#define AMD_WDT_COUNT(base) ((base) + 0x04) /* Watchdog Count */ + #define AMD_WDT_COUNT_MASK 0xFFFF + +#define AMD_PM_WATCHDOG_EN_REG 0x00 + #define AMD_PM_WATCHDOG_TIMER_EN (0x01 << 7) + +#define AMD_PM_WATCHDOG_CONFIG_REG 0x03 + #define AMD_PM_WATCHDOG_32USEC_RES 0x0 + #define AMD_PM_WATCHDOG_10MSEC_RES 0x1 + #define AMD_PM_WATCHDOG_100MSEC_RES 0x2 + #define AMD_PM_WATCHDOG_1SEC_RES 0x3 +#define AMD_PM_WATCHDOG_CONFIG_MASK 0x3 + +/* IO port address for indirect access using ACPI PM registers */ +#define AMD_IO_PM_INDEX_REG 0xCD6 +#define AMD_IO_PM_DATA_REG 0xCD7 + +#define AMD_ACPI_MMIO_ADDR_MASK ~0x1FFF +#define PCI_DEVICE_ID_AMD_CARRIZO_SMBUS 0x790B + +#endif /* _AMD_WDT_H_ */ diff --git a/common/mentor-swupdate/recipes-bsp/grub/grub-efi_2.02.bbappend b/common/mentor-swupdate/recipes-bsp/grub/grub-efi_2.02.bbappend new file mode 100644 index 00000000..eac44868 --- /dev/null +++ b/common/mentor-swupdate/recipes-bsp/grub/grub-efi_2.02.bbappend @@ -0,0 +1,26 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/amd-wdt:" + +SRC_URI_append = " file://Makefile.core.def \ + file://amd_wdt.h \ + file://amd_wdt.c" + +# GRUB's autogen.sh uses GRUB_CONTRIB var to pick up +# out-of-tree modules/utils for building inside GRUB +export GRUB_CONTRIB = "${WORKDIR}/extra-modules" + +do_configure_grub_extra_modules () { + install -d ${GRUB_CONTRIB} + install -d ${GRUB_CONTRIB}/grub-core + install -d ${GRUB_CONTRIB}/grub-core/amd-wdt + install -m 644 ${WORKDIR}/Makefile.core.def ${GRUB_CONTRIB}/grub-core/ + install -m 644 ${WORKDIR}/amd_wdt.h ${GRUB_CONTRIB}/grub-core/amd-wdt/ + install -m 644 ${WORKDIR}/amd_wdt.c ${GRUB_CONTRIB}/grub-core/amd-wdt/ +} + +do_configure_grub_extra_modules_class-native () { + : +} + +addtask do_configure_grub_extra_modules before do_configure after do_unpack + +GRUB_BUILDIN += "amd-wdt" diff --git a/common/mentor-swupdate/recipes-core/glib-2.0/glib-2.0_2.54.3.bbappend b/common/mentor-swupdate/recipes-core/glib-2.0/glib-2.0_2.54.3.bbappend new file mode 100644 index 00000000..c7a551c5 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/glib-2.0/glib-2.0_2.54.3.bbappend @@ -0,0 +1 @@ +GIO_MODULE_PACKAGES="" diff --git a/common/mentor-swupdate/recipes-core/glib-networking/glib-networking_%.bbappend b/common/mentor-swupdate/recipes-core/glib-networking/glib-networking_%.bbappend new file mode 100644 index 00000000..c7a551c5 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/glib-networking/glib-networking_%.bbappend @@ -0,0 +1 @@ +GIO_MODULE_PACKAGES="" diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0001-init-install-efi-SWU-fallback-incase-WDT-fired-SWU-p.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0001-init-install-efi-SWU-fallback-incase-WDT-fired-SWU-p.patch new file mode 100644 index 00000000..33a458a0 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0001-init-install-efi-SWU-fallback-incase-WDT-fired-SWU-p.patch @@ -0,0 +1,28 @@ +From 2b8e67eb5899962528ab821754c76abd1bc4aef3 Mon Sep 17 00:00:00 2001 +From: "Arsalan H. Awan" <Arsalan_Awan@mentor.com> +Date: Thu, 14 Feb 2019 14:31:03 +0500 +Subject: [PATCH 1/3] init-install-efi/SWU: fallback incase WDT fired & SWU + performed + +Signed-off-by: Arsalan H. Awan <Arsalan_Awan@mentor.com> +--- + init-install-efi.sh | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index ba0de76..e259785 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -320,6 +320,9 @@ save_env --file ${GRUBENV#\/boot} RFS + $cmd + } + FALL_BACK ++ # Mentor - SWUpdate - set the default boot as per the WDT and SWU status ++ # If WDT fired && SWU performed, fallback to last working state, else normal boot ++ sed -i "/default=boot/a if ! amd-wdt getstatus; then\n if test \$KERNEL != \$FB_KERNEL; then\n set default='fallback'\n fi\nfi\n" $GRUBCFG + fi + + if [ -d /run/media/$1/loader ]; then +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0001-init-install-efi-manage-partitioning-scheme-as-per-M.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0001-init-install-efi-manage-partitioning-scheme-as-per-M.patch new file mode 100644 index 00000000..73afa447 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0001-init-install-efi-manage-partitioning-scheme-as-per-M.patch @@ -0,0 +1,168 @@ +From bc6af3b77cbfa06a76d0d04d668c9883494fe8dd Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Fri, 11 Jan 2019 12:04:02 +0500 +Subject: [PATCH 1/7] init-install-efi: manage partitioning scheme as per MEL + SWUpdate + +The partitioning scheme is updated in order to support SWUpdate +in a dual-copy approach with additional partitions for persistent +and data storage. This is a hardcoded scheme for now so it can +only support devices with at least a minimum size of 8GB which +yields a data partition of around 600MB considering a few factors. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 76 ++++++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 61 insertions(+), 15 deletions(-) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index 82b0aa8..5fb2ae4 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -21,6 +21,8 @@ fi + # add 10M to provide some extra space for users and account + # for rounding in the above subtractions + boot_size=$(( boot_size + 10 )) ++# MEL - SWUpdate - we'll be keeping two kernel binaries so simply take twice the size ++boot_size=$(( boot_size * 2 )) + + # 5% for swap + swap_ratio=5 +@@ -147,12 +149,32 @@ fi + + disk_size=$(parted ${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") + ++# MEL - SWUpdate - dual-copy approach ++# Here's the partitioning scheme ++# Partition Size Mode ++# boot Calculated from the installation device RW ++# root(1) 3G R ++# root(2) 3G R ++# persistent 1G RW ++# userdata Whatever's left from all other parts RW ++# swap 5% of disk size swap ++rootfs_size=3072 ++rootfs1_start=$((boot_size)) ++rootfs1_end=$((rootfs1_start+rootfs_size)) ++rootfs2_start=$rootfs1_end ++rootfs2_end=$((rootfs2_start+rootfs_size)) ++ ++persistent_size=1024 ++persistent_start=$rootfs2_end ++persistent_end=$((persistent_start+persistent_size)) ++ + swap_size=$((disk_size*swap_ratio/100)) +-rootfs_size=$((disk_size-boot_size-swap_size)) + +-rootfs_start=$((boot_size)) +-rootfs_end=$((rootfs_start+rootfs_size)) +-swap_start=$((rootfs_end)) ++userdata_size=$((disk_size-boot_size-rootfs_size*2-persistent_size-swap_size)) ++userdata_start=$persistent_end ++userdata_end=$((userdata_start+userdata_size)) ++ ++swap_start=$((userdata_end)) + + # MMC devices are special in a couple of ways + # 1) they use a partition prefix character 'p' +@@ -171,12 +193,17 @@ if [ -n `readlink /dev/disk/by-id/usb* | grep $TARGET_DEVICE_NAME` ]; then + fi + + bootfs=${device}${part_prefix}1 +-rootfs=${device}${part_prefix}2 +-swap=${device}${part_prefix}3 ++rootfs1=${device}${part_prefix}2 ++rootfs2=${device}${part_prefix}3 ++persistent=${device}${part_prefix}4 ++userdata=${device}${part_prefix}5 ++swap=${device}${part_prefix}6 + + echo "*****************" + echo "Boot partition size: $boot_size MB ($bootfs)" +-echo "Rootfs partition size: $rootfs_size MB ($rootfs)" ++echo "Per rootfs partition size: $rootfs_size MB ($rootfs)" ++echo "Persistent partition size: $persistent_size MB ($rootfs)" ++echo "User data partition size: $userdata_size MB ($rootfs)" + echo "Swap partition size: $swap_size MB ($swap)" + echo "*****************" + echo "Deleting partition table on ${device} ..." +@@ -189,8 +216,17 @@ echo "Creating boot partition on $bootfs" + parted ${device} mkpart boot fat32 0% $boot_size + parted ${device} set 1 boot on + +-echo "Creating rootfs partition on $rootfs" +-parted ${device} mkpart root ext4 $rootfs_start $rootfs_end ++echo "Creating rootfs partition 1 on $rootfs1" ++parted ${device} mkpart platform ext4 $rootfs1_start $rootfs1_end ++ ++echo "Creating rootfs partition 2 on $rootfs2" ++parted ${device} mkpart platform ext4 $rootfs2_start $rootfs2_end ++ ++echo "Creating persistent partition on $persistent" ++parted ${device} mkpart persistent ext4 $persistent_start $persistent_end ++ ++echo "Creating user data partition on $userdata" ++parted ${device} mkpart data ext4 $userdata_start $userdata_end + + echo "Creating swap partition on $swap" + parted ${device} mkpart swap linux-swap $swap_start 100% +@@ -199,7 +235,7 @@ parted ${device} print + + echo "Waiting for device nodes..." + C=0 +-while [ $C -ne 3 ] && [ ! -e $bootfs -o ! -e $rootfs -o ! -e $swap ]; do ++while [ $C -ne 3 ] && [ ! -e $bootfs -o ! -e $rootfs1 -o ! -e $rootfs2 -o ! -e $persistent -o ! -e $userdata -o ! -e $swap ]; do + C=$(( C + 1 )) + sleep 1 + done +@@ -207,8 +243,17 @@ done + echo "Formatting $bootfs to vfat..." + mkfs.vfat $bootfs + +-echo "Formatting $rootfs to ext4..." +-mkfs.ext4 $rootfs ++echo "Formatting $rootfs1 to ext4..." ++mkfs.ext4 $rootfs1 ++ ++echo "Formatting $rootfs2 to ext4..." ++mkfs.ext4 $rootfs2 ++ ++echo "Formatting $persistent to ext4..." ++mkfs.ext4 $persistent ++ ++echo "Formatting $userdata to ext4..." ++mkfs.ext4 $userdata + + echo "Formatting swap partition...($swap)" + mkswap $swap +@@ -218,7 +263,8 @@ mkdir /src_root + mkdir -p /boot + + # Handling of the target root partition +-mount $rootfs /tgt_root ++# MEL - SWUpdate - simply install to rootfs1 for now ++mount $rootfs1 /tgt_root + mount -o rw,loop,noatime,nodiratime /run/media/$1/$2 /src_root + echo "Copying rootfs files..." + cp -a /src_root/* /tgt_root +@@ -245,7 +291,7 @@ mkdir -p $EFIDIR + cp /run/media/$1/EFI/BOOT/*.efi $EFIDIR + + if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then +- root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs}) ++ root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs1}) + GRUBCFG="$EFIDIR/grub.cfg" + cp /run/media/$1/EFI/BOOT/grub.cfg $GRUBCFG + # Update grub config for the installed image +@@ -261,7 +307,7 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + fi + + if [ -d /run/media/$1/loader ]; then +- rootuuid=$(blkid -o value -s PARTUUID ${rootfs}) ++ rootuuid=$(blkid -o value -s PARTUUID ${rootfs1}) + SYSTEMDBOOT_CFGS="/boot/loader/entries/*.conf" + # copy config files for systemd-boot + cp -dr /run/media/$1/loader /boot +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0002-init-install-efi-SWU-add-setup-WDT-routine-to-enable.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0002-init-install-efi-SWU-add-setup-WDT-routine-to-enable.patch new file mode 100644 index 00000000..22d4a626 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0002-init-install-efi-SWU-add-setup-WDT-routine-to-enable.patch @@ -0,0 +1,39 @@ +From 34fb95494f01cd0adbcfae5d113f669336d8cf0c Mon Sep 17 00:00:00 2001 +From: "Arsalan H. Awan" <Arsalan_Awan@mentor.com> +Date: Fri, 8 Mar 2019 12:05:56 +0500 +Subject: [PATCH 2/3] init-install-efi/SWU: add setup WDT routine to enable if + mel_wdt is 1 + +> set WDT timeout to 60s by default to reboot in case system hangs. +> start WDT ONLY IF mel_wdt is set to 1. +>> this allows user to disable the WDT in case the user is doing + kernel debugging or so and wants the system to keep running. +> enable WDT (set mel_wdt=1) by default + +Signed-off-by: Arsalan H. Awan <Arsalan_Awan@mentor.com> +--- + init-install-efi.sh | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index e259785..270b254 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -323,6 +323,14 @@ FALL_BACK + # Mentor - SWUpdate - set the default boot as per the WDT and SWU status + # If WDT fired && SWU performed, fallback to last working state, else normal boot + sed -i "/default=boot/a if ! amd-wdt getstatus; then\n if test \$KERNEL != \$FB_KERNEL; then\n set default='fallback'\n fi\nfi\n" $GRUBCFG ++ # Mentor - SWUpdate - setup routine for WDT ++ sed -i "/menuentry.*boot/i function setup_wdt {\n}\n" $GRUBCFG ++ # > If mel_wdt is set to 1, ONLY THEN start the WDT ++ sed -i "/function setup_wdt/a if test \$mel_wdt -eq 1; then amd-wdt start; fi" $GRUBCFG ++ # > set WDT timeout value to 60s by default ++ sed -i "/function setup_wdt/a amd-wdt settime 60" $GRUBCFG ++ # Mentor - SWUpdate - enable WDT by default ++ sed -i "/menuentry.*boot/i set mel_wdt=1\n" $GRUBCFG + fi + + if [ -d /run/media/$1/loader ]; then +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0002-init-install-efi-do-not-blacklist-root-device-for-ud.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0002-init-install-efi-do-not-blacklist-root-device-for-ud.patch new file mode 100644 index 00000000..0abed1bb --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0002-init-install-efi-do-not-blacklist-root-device-for-ud.patch @@ -0,0 +1,31 @@ +From 701cddcf67faff9234d1c07278f580aea10cd71a Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Fri, 11 Jan 2019 17:20:07 +0500 +Subject: [PATCH 2/7] init-install-efi: do not blacklist root device for udev + +We want all partitions to show up so that SWUpdate can +create its links accordingly. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index 5fb2ae4..6e713ba 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -273,10 +273,6 @@ if [ -d /tgt_root/etc/ ] ; then + swap_part_uuid=$(blkid -o value -s PARTUUID ${swap}) + echo "/dev/disk/by-partuuid/$swap_part_uuid swap swap defaults 0 0" >> /tgt_root/etc/fstab + echo "UUID=$boot_uuid /boot vfat defaults 1 2" >> /tgt_root/etc/fstab +- # We dont want udev to mount our root device while we're booting... +- if [ -d /tgt_root/etc/udev/ ] ; then +- echo "${device}" >> /tgt_root/etc/udev/mount.blacklist +- fi + fi + + umount /src_root +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0003-init-install-efi-SWU-start-the-WDT-as-soon-as-a-menu.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0003-init-install-efi-SWU-start-the-WDT-as-soon-as-a-menu.patch new file mode 100644 index 00000000..cbec24aa --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0003-init-install-efi-SWU-start-the-WDT-as-soon-as-a-menu.patch @@ -0,0 +1,27 @@ +From 64dd7084103bddf314365271981bf535e863e647 Mon Sep 17 00:00:00 2001 +From: "Arsalan H. Awan" <Arsalan_Awan@mentor.com> +Date: Fri, 8 Mar 2019 12:15:56 +0500 +Subject: [PATCH 3/3] init-install-efi/SWU: start the WDT as soon as a + menuentry is selected + +Signed-off-by: Arsalan H. Awan <Arsalan_Awan@mentor.com> +--- + init-install-efi.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index 270b254..502b0ce 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -331,6 +331,8 @@ FALL_BACK + sed -i "/function setup_wdt/a amd-wdt settime 60" $GRUBCFG + # Mentor - SWUpdate - enable WDT by default + sed -i "/menuentry.*boot/i set mel_wdt=1\n" $GRUBCFG ++ # Mentor - SWUpdate - start the WDT as soon as a menuentry is selected ++ sed -i "/menuentry/a setup_wdt" $GRUBCFG + fi + + if [ -d /run/media/$1/loader ]; then +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0003-init-install-efi-deploy-kernel-images-as-imageA.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0003-init-install-efi-deploy-kernel-images-as-imageA.patch new file mode 100644 index 00000000..c417da6c --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0003-init-install-efi-deploy-kernel-images-as-imageA.patch @@ -0,0 +1,47 @@ +From 5c72bcb27e0d0528abde7e03700a210f38200046 Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Sat, 12 Jan 2019 01:22:14 +0500 +Subject: [PATCH 3/7] init-install-efi: deploy kernel images as imageA + +With a single boot partition we keep two copies of +kernel to support the AB approach so deploy kernels +as imageA on scratch installation. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index 6e713ba..8905cfa 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -286,9 +286,9 @@ mkdir -p $EFIDIR + # Copy the efi loader + cp /run/media/$1/EFI/BOOT/*.efi $EFIDIR + ++GRUBCFG="$EFIDIR/grub.cfg" + if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs1}) +- GRUBCFG="$EFIDIR/grub.cfg" + cp /run/media/$1/EFI/BOOT/grub.cfg $GRUBCFG + # Update grub config for the installed image + # Delete the install entry +@@ -324,8 +324,13 @@ umount /tgt_root + # Copy kernel artifacts. To add more artifacts just add to types + # For now just support kernel types already being used by something in OE-core + for types in bzImage zImage vmlinux vmlinuz fitImage; do ++ # MEL - SWUpdate - copy all kernel images as <image>A, this is our first copy + for kernel in `find /run/media/$1/ -name $types*`; do +- cp $kernel /boot ++ kernel_name=$(basename $kernel) ++ cp $kernel /boot/${kernel_name}A ++ if [ -e $GRUBCFG ]; then ++ sed -i "s/\/${kernel_name} /\/${kernel_name}A /" $GRUBCFG ++ fi + done + done + +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch new file mode 100644 index 00000000..1548f505 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch @@ -0,0 +1,73 @@ +From 78d26166a8ad1bc8d29822d45a6a382b87fa095d Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Mon, 14 Jan 2019 19:40:50 +0500 +Subject: [PATCH 4/7] init-install-efi: pick kernel and rootfs from grub.env + +This allows for simply modifying variables to switch between +different kernels and rootfs from user-space without having to +modify grub configurations directly. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 22 +++++++++++++++++++--- + 1 file changed, 19 insertions(+), 3 deletions(-) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index 2adfe02..d69520f 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -287,6 +287,7 @@ mkdir -p $EFIDIR + cp /run/media/$1/EFI/BOOT/*.efi $EFIDIR + + GRUBCFG="$EFIDIR/grub.cfg" ++GRUBENV="$EFIDIR/grub.env" + if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs1}) + cp /run/media/$1/EFI/BOOT/grub.cfg $GRUBCFG +@@ -297,9 +298,14 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + sed -i "/initrd /d" $GRUBCFG + # Delete any LABEL= strings + sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG ++ # Mentor- SWUpdate - force grub to load our env which we'll use to specify RFS and KERNEL ++ sed -i "1iload_env --file ${GRUBENV#\/boot}" $GRUBCFG ++ # Set current and fallback rootfs using variable via our grub.env ++ grub-editenv $GRUBENV set "RFS=PARTUUID=$root_part_uuid" ++ grub-editenv $GRUBENV set "FB_RFS=PARTUUID=$root_part_uuid" + # Replace root= and add additional standard boot options + # We use root as a sentinel value, as vmlinuz is no longer guaranteed +- sed -i "s/ root=[^ ]*/ root=PARTUUID=$root_part_uuid rw $rootwait quiet /g" $GRUBCFG ++ sed -i "s/ root=[^ ]*/ root=\$RFS rw $rootwait quiet /g" $GRUBCFG + fi + + if [ -d /run/media/$1/loader ]; then +@@ -321,15 +327,25 @@ fi + + umount /tgt_root + ++if [ -e "/proc/cmdline" ]; then ++ current_kernel=$(basename $(cat /proc/cmdline | awk '{print $1}' | cut -d"=" -f2)) ++fi + # Copy kernel artifacts. To add more artifacts just add to types + # For now just support kernel types already being used by something in OE-core + for types in bzImage zImage vmlinux vmlinuz fitImage; do + # MEL - SWUpdate - copy all kernel images as <image>A, this is our first copy + for kernel in `find /run/media/$1/ -name $types*`; do + kernel_name=$(basename $kernel) +- cp $kernel /boot/${kernel_name}A ++ cp ${kernel} /boot/${kernel_name}A + if [ -e $GRUBCFG ]; then +- sed -i "s/\/${kernel_name} /\/${kernel_name}A /" $GRUBCFG ++ if [ "${kernel_name}" = "${current_kernel}" ]; then ++ sed -i "s/\/${kernel_name} /\/\$KERNEL /" $GRUBCFG ++ # Set the current and fallback kernel to current kernel's <image>A ++ grub-editenv $GRUBENV set "KERNEL=${kernel_name}A" ++ grub-editenv $GRUBENV set "FB_KERNEL=${kernel_name}A" ++ else ++ sed -i "s/\/${kernel_name} /\/${kernel_name}A /" $GRUBCFG ++ fi + fi + done + done +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0005-init-install-efi-create-fallback-entry.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0005-init-install-efi-create-fallback-entry.patch new file mode 100644 index 00000000..cbebadbc --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0005-init-install-efi-create-fallback-entry.patch @@ -0,0 +1,40 @@ +From 723470df51c6314d166e80636e393316339700a1 Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Wed, 16 Jan 2019 16:12:19 +0500 +Subject: [PATCH 5/7] init-install-efi: create fallback entry + +In case of an update failure we need to switch +our bootparams and fallback to the fallback (FB_) +vars which are a known good configuration. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index ae7e32b..cdab4d6 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -306,6 +306,18 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + # Replace root= and add additional standard boot options + # We use root as a sentinel value, as vmlinuz is no longer guaranteed + sed -i "s/ root=[^ ]*/ root=\$RFS rw $rootwait quiet /g" $GRUBCFG ++ # Mentor - SWUpdate - create our fallback menuentry ++ sed -i "1ifallback=1" $GRUBCFG ++ cmd=$(grep "linux " $GRUBCFG) ++ cat >> $GRUBCFG <<FALL_BACK ++menuentry 'fallback'{ ++set KERNEL=\$FB_KERNEL ++set RFS=\$FB_RFS ++save_env --file ${GRUBENV#\/boot} KERNEL ++save_env --file ${GRUBENV#\/boot} RFS ++$cmd ++} ++FALL_BACK + fi + + if [ -d /run/media/$1/loader ]; then +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0006-init-install-efi-don-t-unnecessarily-set-the-rootfs-.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0006-init-install-efi-don-t-unnecessarily-set-the-rootfs-.patch new file mode 100644 index 00000000..e5c03702 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0006-init-install-efi-don-t-unnecessarily-set-the-rootfs-.patch @@ -0,0 +1,29 @@ +From 74e5fc2d0044f474b42f83918ddd70658fb2013a Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Wed, 16 Jan 2019 16:15:56 +0500 +Subject: [PATCH 6/7] init-install-efi: don't unnecessarily set the rootfs to + rw + +Specifically in swupdate we use a ro rootfs. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index cdab4d6..efe0c64 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -305,7 +305,7 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + grub-editenv $GRUBENV set "FB_RFS=PARTUUID=$root_part_uuid" + # Replace root= and add additional standard boot options + # We use root as a sentinel value, as vmlinuz is no longer guaranteed +- sed -i "s/ root=[^ ]*/ root=\$RFS rw $rootwait quiet /g" $GRUBCFG ++ sed -i "s/ root=[^ ]*/ root=\$RFS $rootwait quiet /g" $GRUBCFG + # Mentor - SWUpdate - create our fallback menuentry + sed -i "1ifallback=1" $GRUBCFG + cmd=$(grep "linux " $GRUBCFG) +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0007-init-install-efi-grub-don-t-set-a-timeout.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0007-init-install-efi-grub-don-t-set-a-timeout.patch new file mode 100644 index 00000000..19500143 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0007-init-install-efi-grub-don-t-set-a-timeout.patch @@ -0,0 +1,30 @@ +From 31a8e28e9a1735d58fa0a70ea92d66233fe48c4b Mon Sep 17 00:00:00 2001 +From: Awais Belal <awais_belal@mentor.com> +Date: Wed, 16 Jan 2019 16:18:54 +0500 +Subject: [PATCH 7/7] init-install-efi: grub don't set a timeout + +We don't want our installed system to show grub +menus as it wouldn't make any sense and we also +want to switch to the fallback entry seamlessly. + +Signed-off-by: Awais Belal <awais_belal@mentor.com> +--- + init-install-efi.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/init-install-efi.sh b/init-install-efi.sh +index efe0c64..ba0de76 100644 +--- a/init-install-efi.sh ++++ b/init-install-efi.sh +@@ -298,6 +298,8 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then + sed -i "/initrd /d" $GRUBCFG + # Delete any LABEL= strings + sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG ++ # Mentor- SWUpdate - don't set a timeout ++ sed -i "s/timeout=.*/timeout=0/" $GRUBCFG + # Mentor- SWUpdate - force grub to load our env which we'll use to specify RFS and KERNEL + sed -i "1iload_env --file ${GRUBENV#\/boot}" $GRUBCFG + # Set current and fallback rootfs using variable via our grub.env +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bbappend b/common/mentor-swupdate/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bbappend new file mode 100644 index 00000000..60972845 --- /dev/null +++ b/common/mentor-swupdate/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bbappend @@ -0,0 +1,11 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +SRC_URI += "file://0001-init-install-efi-manage-partitioning-scheme-as-per-M.patch \ + file://0002-init-install-efi-do-not-blacklist-root-device-for-ud.patch \ + file://0003-init-install-efi-deploy-kernel-images-as-imageA.patch \ + file://0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch \ + file://0005-init-install-efi-create-fallback-entry.patch \ + file://0006-init-install-efi-don-t-unnecessarily-set-the-rootfs-.patch \ + file://0007-init-install-efi-grub-don-t-set-a-timeout.patch \ + file://0001-init-install-efi-SWU-fallback-incase-WDT-fired-SWU-p.patch \ + file://0002-init-install-efi-SWU-add-setup-WDT-routine-to-enable.patch \ + file://0003-init-install-efi-SWU-start-the-WDT-as-soon-as-a-menu.patch" diff --git a/common/mentor-swupdate/recipes-core/systemd/systemd_%.bbappend b/common/mentor-swupdate/recipes-core/systemd/systemd_%.bbappend new file mode 100644 index 00000000..dccda33a --- /dev/null +++ b/common/mentor-swupdate/recipes-core/systemd/systemd_%.bbappend @@ -0,0 +1,2 @@ +pkg_postinst_ontarget_udev-hwdb_amd () { +} diff --git a/common/mentor-swupdate/recipes-gnome/gdk-pixbuf/gdk-pixbuf_%.bbappend b/common/mentor-swupdate/recipes-gnome/gdk-pixbuf/gdk-pixbuf_%.bbappend new file mode 100644 index 00000000..42e2ec29 --- /dev/null +++ b/common/mentor-swupdate/recipes-gnome/gdk-pixbuf/gdk-pixbuf_%.bbappend @@ -0,0 +1,5 @@ +python populate_packages_append () { + pixbuf_pkgs = d.getVar('PIXBUF_PACKAGES').split() + for pkg in pixbuf_pkgs: + d.setVar('pkg_postinst_%s' % pkg, '') +} diff --git a/common/mentor-swupdate/recipes-gnome/gnome/gconf_%.bbappend b/common/mentor-swupdate/recipes-gnome/gnome/gconf_%.bbappend new file mode 100644 index 00000000..c7a551c5 --- /dev/null +++ b/common/mentor-swupdate/recipes-gnome/gnome/gconf_%.bbappend @@ -0,0 +1 @@ +GIO_MODULE_PACKAGES="" diff --git a/common/mentor-swupdate/recipes-graphics/ttf-fonts/liberation-fonts_%.bbappend b/common/mentor-swupdate/recipes-graphics/ttf-fonts/liberation-fonts_%.bbappend new file mode 100644 index 00000000..2092c17a --- /dev/null +++ b/common/mentor-swupdate/recipes-graphics/ttf-fonts/liberation-fonts_%.bbappend @@ -0,0 +1,4 @@ +python add_fontcache_postinsts_append () { + for pkg in d.getVar('FONT_PACKAGES').split(): + d.setVar('pkg_postinst_%s' % pkg, '') +} diff --git a/common/mentor-swupdate/recipes-kernel/amd-wdt/amd-wdt_1.0.bbappend b/common/mentor-swupdate/recipes-kernel/amd-wdt/amd-wdt_1.0.bbappend new file mode 100644 index 00000000..7add9887 --- /dev/null +++ b/common/mentor-swupdate/recipes-kernel/amd-wdt/amd-wdt_1.0.bbappend @@ -0,0 +1,2 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +SRC_URI_append = "file://0001-amd-wdt-do-not-stop-wdt-as-swupdate-implementation-n.patch" diff --git a/common/mentor-swupdate/recipes-kernel/amd-wdt/files/0001-amd-wdt-do-not-stop-wdt-as-swupdate-implementation-n.patch b/common/mentor-swupdate/recipes-kernel/amd-wdt/files/0001-amd-wdt-do-not-stop-wdt-as-swupdate-implementation-n.patch new file mode 100644 index 00000000..28b865b3 --- /dev/null +++ b/common/mentor-swupdate/recipes-kernel/amd-wdt/files/0001-amd-wdt-do-not-stop-wdt-as-swupdate-implementation-n.patch @@ -0,0 +1,31 @@ +From c4024f793cdd2d39e078e1c28ae5744a5808495d Mon Sep 17 00:00:00 2001 +From: "Arsalan H. Awan" <Arsalan_Awan@mentor.com> +Date: Thu, 14 Feb 2019 11:44:30 +0500 +Subject: [PATCH] amd-wdt: do not stop wdt as swupdate implementation needs it + +Mentor SWUpdate as a part of its failsafe update mechanism +implementation requires the WDT to keep running. So lets not +disable it. + +Signed-off-by: Arsalan H. Awan <Arsalan_Awan@mentor.com> +--- + amd_wdt.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/amd_wdt.c b/amd_wdt.c +index 94c3f57..f3bbd90 100755 +--- a/amd_wdt.c ++++ b/amd_wdt.c +@@ -325,9 +325,6 @@ static int amd_wdt_init(struct platform_device *dev) + amd_wdt_dev.max_timeout = AMD_WDT_MAX_TIMEOUT; + watchdog_set_nowayout(&amd_wdt_dev, nowayout); + +- /* Make sure watchdog is not running */ +- amd_wdt_stop(&amd_wdt_dev); +- + /* Set Watchdog timeout */ + amd_wdt_set_timeout(&amd_wdt_dev, heartbeat); + +-- +2.11.1 + diff --git a/common/mentor-swupdate/recipes-multimedia/libomxil/libomxil_%.bbappend b/common/mentor-swupdate/recipes-multimedia/libomxil/libomxil_%.bbappend new file mode 100644 index 00000000..d71acdc4 --- /dev/null +++ b/common/mentor-swupdate/recipes-multimedia/libomxil/libomxil_%.bbappend @@ -0,0 +1,3 @@ +python () { + d.setVar('pkg_postinst_ontarget_libomxil', '') +} diff --git a/common/mentor-swupdate/recipes-support/swupdate/files/bl-kernels b/common/mentor-swupdate/recipes-support/swupdate/files/bl-kernels new file mode 100644 index 00000000..a214b543 --- /dev/null +++ b/common/mentor-swupdate/recipes-support/swupdate/files/bl-kernels @@ -0,0 +1,2 @@ +bzImageA +bzImageB diff --git a/common/mentor-swupdate/recipes-support/swupdate/files/grub.cfg b/common/mentor-swupdate/recipes-support/swupdate/files/grub.cfg new file mode 100644 index 00000000..97216fd0 --- /dev/null +++ b/common/mentor-swupdate/recipes-support/swupdate/files/grub.cfg @@ -0,0 +1,2 @@ +CONFIG_BOOTLOADER_GRUB=y +CONFIG_GRUBENV_PATH="/boot/EFI/BOOT/grub.env" diff --git a/common/mentor-swupdate/recipes-support/swupdate/swupdate_2018.03.bbappend b/common/mentor-swupdate/recipes-support/swupdate/swupdate_2018.03.bbappend new file mode 100644 index 00000000..ce3ecf6b --- /dev/null +++ b/common/mentor-swupdate/recipes-support/swupdate/swupdate_2018.03.bbappend @@ -0,0 +1,9 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +SRC_URI += "file://grub.cfg \ + file://bl-kernels" + +do_install_append() { + install -d ${D}${sysconfdir} + install -d ${D}${sysconfdir}/swupdate + install -m 644 ${WORKDIR}/bl-kernels ${D}${sysconfdir}/swupdate +} |