diff --git a/device.mk b/device.mk index 36535901..1afaf2f8 100644 --- a/device.mk +++ b/device.mk @@ -1133,3 +1133,6 @@ PRODUCT_VENDOR_PROPERTIES += ro.crypto.metadata_init_delete_all_keys.enabled?=tr # Hardware Info Collection include hardware/google/pixel/HardwareInfo/HardwareInfo.mk + +# UFS: the script is used to select the corresponding firmware to run FFU. +PRODUCT_PACKAGES_DEBUG += ufs_firmware_update.sh diff --git a/storage/Android.bp b/storage/Android.bp new file mode 100644 index 00000000..83397bb1 --- /dev/null +++ b/storage/Android.bp @@ -0,0 +1,33 @@ +// +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/zuma:device_google_zuma_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/zuma:device_google_zuma_license", + ], +} + +sh_binary { + name: "ufs_firmware_update.sh", + src: "ufs_firmware_update.sh", + init_rc: ["storage.zuma.rc"], + vendor: true, +} + diff --git a/storage/storage.zuma.rc b/storage/storage.zuma.rc new file mode 100644 index 00000000..9873325d --- /dev/null +++ b/storage/storage.zuma.rc @@ -0,0 +1,7 @@ +on property:sys.boot_completed=1 + # Copy ufs firmware to disk + start ufs_firmware_update + +service ufs_firmware_update /vendor/bin/ufs_firmware_update.sh + disabled + oneshot diff --git a/storage/ufs_firmware_update.sh b/storage/ufs_firmware_update.sh new file mode 100755 index 00000000..df3ac86c --- /dev/null +++ b/storage/ufs_firmware_update.sh @@ -0,0 +1,17 @@ +#!/vendor/bin/sh +# +# The script belongs to the feature of UFS FFU via OTA: go/p23-ffu-ota +# Its purpose is to copy the corresponding firmware into partition for UFS FFU. + +ufs_dev="/dev/sys/block/bootdevice" +fw_dir="/vendor/firmware" +blk_dev="/dev/block/by-name/ufs_internal" + +vendor=$(cat ${ufs_dev}/vendor | tr -d "[:space:]") +model=$(cat ${ufs_dev}/model | tr -d "[:space:]") +rev=$(cat ${ufs_dev}/rev | tr -d "[:space:]") + +file=$(find ${fw_dir} -name "*${vendor}${model}${rev}*" | head -n 1) +if [ -n "$file" ]; then + dd if="$file" of=$blk_dev bs=4k +fi