From 440bad0bdd18e0c1cab8ab90b41829ee7277b708 Mon Sep 17 00:00:00 2001 From: Wenhao Wang Date: Thu, 15 Jul 2021 21:37:48 -0700 Subject: [PATCH] trusty:storageproxyd: Add wakelock to the UFS commands We add a wakelock to the sequence of UFS commands so that the sequence will not be disrrupted when devices get suspended. Bug: 193456223 Test: Trusty storage tests Merged-In: Ib90f8b284017cf261d2a2aea940834a42c21de02 Change-Id: Ib90f8b284017cf261d2a2aea940834a42c21de02 --- trusty/storage/proxy/Android.bp | 5 ++++- trusty/storage/proxy/rpmb.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/trusty/storage/proxy/Android.bp b/trusty/storage/proxy/Android.bp index a47143538..d67089fb2 100644 --- a/trusty/storage/proxy/Android.bp +++ b/trusty/storage/proxy/Android.bp @@ -29,7 +29,10 @@ cc_binary { "proxy.c", ], - shared_libs: ["liblog"], + shared_libs: [ + "liblog", + "libhardware_legacy", + ], header_libs: ["libcutils_headers"], static_libs: [ diff --git a/trusty/storage/proxy/rpmb.c b/trusty/storage/proxy/rpmb.c index abeacdfed..b59fb67f6 100644 --- a/trusty/storage/proxy/rpmb.c +++ b/trusty/storage/proxy/rpmb.c @@ -29,6 +29,8 @@ #include #include +#include + #include "ipc.h" #include "log.h" #include "rpmb.h" @@ -100,6 +102,8 @@ static int rpmb_fd = -1; static uint8_t read_buf[4096]; static enum dev_type dev_type = UNKNOWN_RPMB; +static const char* UFS_WAKE_LOCK_NAME = "ufs_seq_wakelock"; + #ifdef RPMB_DEBUG static void print_buf(const char* prefix, const uint8_t* buf, size_t size) { @@ -194,6 +198,7 @@ static int send_mmc_rpmb_req(int mmc_fd, const struct storage_rpmb_send_req* req static int send_ufs_rpmb_req(int sg_fd, const struct storage_rpmb_send_req* req) { int rc; + int wl_rc; const uint8_t* write_buf = req->payload; /* * Meaning of member values are stated on the definition of struct sec_proto_cdb. @@ -202,6 +207,12 @@ static int send_ufs_rpmb_req(int sg_fd, const struct storage_rpmb_send_req* req) struct sec_proto_cdb out_cdb = {0xB5, 0xEC, 0x00, 0x01, 0x00, 0x00, 0, 0x00, 0x00}; unsigned char sense_buffer[32]; + wl_rc = acquire_wake_lock(PARTIAL_WAKE_LOCK, UFS_WAKE_LOCK_NAME); + if (wl_rc < 0) { + ALOGE("%s: failed to acquire wakelock: %d, %s\n", __func__, wl_rc, strerror(errno)); + return wl_rc; + } + if (req->reliable_write_size) { /* Prepare SECURITY PROTOCOL OUT command. */ out_cdb.length = __builtin_bswap32(req->reliable_write_size); @@ -244,6 +255,11 @@ static int send_ufs_rpmb_req(int sg_fd, const struct storage_rpmb_send_req* req) } err_op: + wl_rc = release_wake_lock(UFS_WAKE_LOCK_NAME); + if (wl_rc < 0) { + ALOGE("%s: failed to release wakelock: %d, %s\n", __func__, wl_rc, strerror(errno)); + } + return rc; }