diff --git a/device-bluejay.mk b/device-bluejay.mk index 6663f06..62e97f3 100644 --- a/device-bluejay.mk +++ b/device-bluejay.mk @@ -247,3 +247,5 @@ PRODUCT_PRODUCT_PROPERTIES ?= \ PRODUCT_PRODUCT_PROPERTIES += \ setupwizard.feature.enable_quick_start_flow_for_debug=true \ +# UFS: the script is used to select the corresponding firmware to run FFU. +PRODUCT_PACKAGES += ufs_firmware_update.sh diff --git a/storage/Android.bp b/storage/Android.bp new file mode 100644 index 0000000..595857a --- /dev/null +++ b/storage/Android.bp @@ -0,0 +1,27 @@ +// +// 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 { + default_applicable_licenses: [ + "//device/google/bluejay:device_google_bluejay_license", + ], +} + +sh_binary { + name: "ufs_firmware_update.sh", + src: "ufs_firmware_update.sh", + init_rc: ["storage.bluejay.rc"], + vendor: true, +} diff --git a/storage/storage.bluejay.rc b/storage/storage.bluejay.rc new file mode 100644 index 0000000..9873325 --- /dev/null +++ b/storage/storage.bluejay.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 0000000..d118115 --- /dev/null +++ b/storage/ufs_firmware_update.sh @@ -0,0 +1,19 @@ +#!/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/fips" + +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 + # The first 4KB block at fips partition has been occupied, and unused space begins from 4 KB + # Refer to: go/pixel-mp-ffu-ota-1p + dd if="$file" of=$blk_dev bs=4k seek=1 +fi