db845c: installer: Add bootloader binaries and flashing scripts
am: ed3f821b9a

Change-Id: Icd803d9c9ad1b777ef51c4790daf0e71380b52f4
diff --git a/device-common.mk b/device-common.mk
index 91f07cc..ca32194 100644
--- a/device-common.mk
+++ b/device-common.mk
@@ -156,6 +156,10 @@
 PRODUCT_PACKAGES += \
     android.hardware.gatekeeper@1.0-service.software
 
+# mkbootimg host tool to build boot.img separately
+PRODUCT_HOST_PACKAGES := \
+    mkbootimg
+
 # Copy standard platform config files
 PRODUCT_COPY_FILES +=  \
     $(LOCAL_PATH)/ueventd.common.rc:$(TARGET_COPY_OUT_VENDOR)/ueventd.rc \
diff --git a/installer/db845c/README b/installer/db845c/README
new file mode 100644
index 0000000..61c3a3b
--- /dev/null
+++ b/installer/db845c/README
@@ -0,0 +1,84 @@
+These instructions will help you flashing the prebuilt bootloader
+and AOSP images(built from sources) on db845c.
+
+First, you wil need to have first built AOSP for the
+db845c-userdebug lunch target.
+
+
+Boot the board into fastboot mode:
+----------------------------------
+The easiest way to boot into fastboot mode is to run something
+like "adb reboot bootloader" from the host, or
+"reboot bootloader" on the device.  However, this
+functionality may depend on the software installed on the board
+to work, so you may need to manually enter fastboot mode as
+follows.
+
+
+To manually enter fastboot mode:
+--------------------------------
+* To manually boot the board into fastboot mode, press DOWN arrow
+  key over serial UART console when restarting the board.
+
+                         OR
+
+* Disconnect the power *and* USB-C cable. Flip the board over, and
+  while holding down the "VOL-" button plug in the power cable.
+  Continue holding down the "VOL-" button and tap the "ON/OFF"
+  button. The board should then boot to fastboot mode. Be sure to
+  then re-connect the USB-C cable so that you can flash the board.
+
+If HDMI is plugged in, you should see a text based
+"FastBoot Mode" prompt on your screen. Or you can check by running
+"fastboot devices" on your host which will print something like:
+
+  $ fastboot devices
+  c4e1189c        fastboot
+
+
+Flash the board:
+----------------
+Once the board is in fastboot mode, you can then flash it by
+running the following from the
+device/linaro/dragonboard/installer/db845c/ directory:
+
+  $ ./flash-all-aosp.sh <optional_kernel_binary>
+
+
+This will flash the bootloader binaries, AOSP images (userdata.img
+and super.img), and will also generate and flash boot.img if kernel
+binary (in Image.gz-dtb format) is passed to the script.
+
+
+Troubleshooting:
+----------------
+* Make sure the USB-C cable is connected. As it has to be
+  removed to fully power the device down, it is easy to forget
+  to reconnect it!
+
+* If you cannot get the board into fastboot mode, or for some
+  reason the flash-all-aosp.sh script does not work, you can do
+  a full recovery flash of the board using the following
+  instructions.
+
+
+Recovery:
+--------
+First boot into recovery mode. After removing the power cable
+and the USB-C cable, connect power while holding the "USB"
+button (next to volume buttons near the USB-A ports). While
+continuing to hold down the "USB" button, tap the "ON/OFF"
+button. Then re-connect USB-C cable. There will be no HDMI
+display output in recovery mode, and initially no serial output.
+
+Then run the recovery script from the
+device/linaro/dragonboard/installer/db845c/ directory:
+
+  $ ./recovery.sh
+
+This will do a recovery flash of the ptable and bootloader
+binaries. After it is finished, the board will reboot.
+
+Depending on the state of the board, it will enter fastboot
+or may boot to a previously installed kernel. At that point
+you may start again from the top of this document.
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/BTFM.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/BTFM.bin
new file mode 100644
index 0000000..b82e363
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/BTFM.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/LICENSE b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/LICENSE
new file mode 100644
index 0000000..6b9a0a2
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/LICENSE
@@ -0,0 +1,206 @@
+PLEASE READ THIS LICENSE AGREEMENT ("AGREEMENT") CAREFULLY.  THIS AGREEMENT IS

+A BINDING LEGAL AGREEMENT ENTERED INTO BY AND BETWEEN YOU (OR IF YOU ARE

+ENTERING INTO THIS AGREEMENT ON BEHALF OF AN ENTITY, THEN THE ENTITY THAT YOU

+REPRESENT) AND QUALCOMM TECHNOLOGIES, INC. ("QTI" "WE" "OUR" OR "US").  THIS IS

+THE AGREEMENT THAT APPLIES TO YOUR USE OF THE DESIGNATED AND/OR LINKED

+APPLICATIONS, THE ENCLOSED QUALCOMM TECHNOLOGIES' MATERIALS, INCLUDING RELATED

+DOCUMENTATION AND ANY UPDATES OR IMPROVEMENTS THEREOF

+(COLLECTIVELY, "MATERIALS").  BY USING OR COMPLETING THE INSTALLATION OF THE

+MATERIALS, YOU ARE ACCEPTING THIS AGREEMENT AND YOU AGREE TO BE BOUND BY ITS

+TERMS AND CONDITIONS.  IF YOU DO NOT AGREE TO THESE TERMS, QTI IS UNWILLING TO

+AND DOES NOT LICENSE THE MATERIALS TO YOU. IF YOU DO NOT AGREE TO THESE TERMS

+YOU MUST DISCONTINUE THE INSTALLATION PROCESS AND YOU MAY NOT USE THE MATERIALS

+OR RETAIN ANY COPIES OF THE MATERIALS. ANY USE OR POSSESSION OF THE MATERIALS

+BY YOU IS SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT.

+

+1. RIGHT TO USE DELIVERABLES; RESTRICTIONS.

+

+  1.1 License.  Subject to the terms and conditions of this Agreement,

+  including, without limitation, the restrictions, conditions, limitations and

+  exclusions set forth in this Agreement, QTI hereby grants to you a

+  nonexclusive, limited license under QTI's copyrights to:  (i) install and use

+  the Materials; and (ii) to reproduce and redistribute the binary code portions

+  of the Materials (the "Redistributable Binary Code").  You may make and use a

+  reasonable number of copies of any documentation.

+

+  1.2 Redistribution Restrictions.  Distribution of the Redistributable Binary

+  Code is subject to the following restrictions: (i) Redistributable Binary Code

+  may only be distributed in binary format and may not be distributed in source

+  code format:; (ii)  the Redistributable Binary Code may only operate in

+  conjunction with platforms incorporating Qualcomm Technologies, Inc. chipsets;

+  (iii) redistribution of the Redistributable Binary Code must include the .txt

+  file setting forth the terms and condition of this Agreement; (iv) you may not

+  use Qualcomm Technologies' or its affiliates or subsidiaries name, logo or

+  trademarks; and (v) copyright, trademark, patent and any other notices that

+  appear on the Materials may not be removed or obscured.

+

+  1.3 Additional Restrictions.  Except as expressly permitted by this Agreement,

+  you shall have no right to sublicense, transfer or otherwise disclose the

+  Materials to any third party.  You shall not reverse engineer, reverse

+  assemble, reverse translate, decompile or reduce to source code form any

+  portion of the Materials provided in object code form or executable form.

+  Except for the purposes expressly permitted in this Agreement, You shall not

+  use the Materials for any other purpose.  QTI (or its licensors) shall retain

+  title and all ownership rights in and to the Materials and any alterations,

+  modifications (including all derivative works), translations or adaptations

+  made of the Materials, and all copies thereof, and nothing herein shall be

+  deemed to grant any right to You under any of QTI's or its affiliates'

+  patents.  You shall not subject the Materials to any third party license

+  terms (e.g., open source license terms).  You shall not use the Materials for

+  the purpose of identifying or providing evidence to support any potential

+  patent infringement claim against QTI, its affiliates, or any of QTI's or

+  QTI's affiliates' suppliers and/or direct or indirect customers.  QTI hereby

+  reserves all rights not expressly granted herein.

+

+  1.4 Third Party Software and Materials.  The Software may contain or link to

+  certain software and/or materials that are written or owned by third parties.

+  Such third party code and materials may be licensed under separate or

+  different terms and conditions and are not licensed to you under the terms of

+  this Agreement.  You agree to comply with all terms and conditions imposed on

+  you in the applicable third party licenses.  Such terms and conditions may

+  impose certain obligations on you as a condition to the permitted use of such

+  third party code and materials.  QTI does not represent or warrant that such

+  third party licensors have or will continue to license or make available their

+  code and materials to you.

+

+  1.5 Feedback.  QTI may from time to time receive suggestions, feedback or

+  other information from You regarding the Materials.  Any suggestions, feedback

+  or other disclosures received from You are and shall be entirely voluntary on

+  the part of You.  Notwithstanding any other term in this Agreement, QTI shall

+  be free to use suggestions, feedback or other information received from You,

+  without obligation of any kind to You.  The Parties agree that all inventions,

+  product improvements, and modifications conceived of or made by QTI that are

+  based, either in whole or in part, on ideas, feedback, suggestions, or

+  recommended improvements received from You are the exclusive property of QTI,

+  and all right, title and interest in and to any such inventions, product

+  improvements, and modifications will vest solely in QTI.

+

+  1.6 No Technical Support.  QTI is under no obligation to provide any form of

+  technical support for the Materials, and if QTI, in its sole discretion,

+  chooses to provide any form of support or information relating to the

+  Materials, such support and information shall be deemed confidential and

+  proprietary to QTI.

+

+2. WARRANTY DISCLAIMER.  YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT THE USE OF

+THE MATERIALS IS AT YOUR SOLE RISK.  THE MATERIALS AND TECHNICAL SUPPORT, IF

+ANY, ARE PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR

+IMPLIED.  QTI ITS LICENSORS AND AFFILIATES MAKE NO WARRANTIES, EXPRESS OR

+IMPLIED, WITH RESPECT TO THE MATERIALS OR ANY OTHER INFORMATION OR DOCUMENTATION

+PROVIDED UNDER THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF

+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR

+ANY EXPRESS OR IMPLIED WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE OF

+DEALING OR COURSE OF PERFORMANCE.  NOTHING CONTAINED IN THIS AGREEMENT SHALL BE

+CONSTRUED AS (I) A WARRANTY OR REPRESENTATION BY QTI, ITS LICENSORS OR

+AFFILIATES AS TO THE VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER

+INTELLECTUAL PROPERTY RIGHT OR (II) A WARRANTY OR REPRESENTATION BY QTI THAT ANY

+MANUFACTURE OR USE WILL BE FREE FROM INFRINGEMENT OF PATENTS, COPYRIGHTS OR

+OTHER INTELLECTUAL PROPERTY RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE

+RESPONSIBILITY OF YOU TO MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT TO

+THE ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY OF

+THIRD PARTIES.

+

+3. NO OTHER LICENSES OR INTELLECTUAL PROPERTY RIGHTS. Neither this Agreement,

+nor any act by QTI or any of its affiliates pursuant to this Agreement or

+relating to the Materials (including, without limitation, the provision by QTI

+or its affiliates of the Materials), shall provide to You any license or any

+other rights whatsoever under any patents, trademarks, trade secrets, copyrights

+or any other intellectual property of QTI or any of its affiliates, except for

+the copyright rights expressly licensed under this Agreement. You understand and

+agree that:

+

+  (i) Neither this Agreement, nor delivery of the Materials, grants any right to

+  practice, or any other right at all with respect to, any patent of QTI or any

+  of its affiliates; and

+

+  (ii) A separate license agreement from QUALCOMM Incorporated is needed to use

+  or practice any patent of QUALCOMM Incorporated. You agree not to contend in

+  any context that, as a result of the provision or use of the Materials, either

+  QTI or any of its affiliates has any obligation to extend, or You or any other

+  party has obtained any right to, any license, whether express or implied, with

+  respect to any patent of QTI or any of its affiliates for any purpose.

+

+4. TERMINATION.  This Agreement shall be effective upon acceptance, or access or

+use of the Materials (whichever occurs first) by You and shall continue until

+terminated. You may terminate the Agreement at any time by deleting and

+destroying all copies of the Materials and all related information in Your

+possession or control. This Agreement terminates immediately and automatically,

+with or without notice, if You fail to comply with any provision hereof.

+Additionally, QTI may at any time terminate this Agreement, without cause, upon

+notice to You. Upon termination You must, to the extent possible, delete or

+destroy all copies of the Materials in Your possession and the license granted

+to You in this Agreement shall terminate. Sections 1.2 through 10 shall survive

+the termination of this Agreement. In the event that any restrictions,

+conditions, limitations are found to be either invalid or unenforceable, the

+rights granted to You in Section 1 (License) shall be null, void and ineffective

+from the Effective Date, and QTI shall also have the right to terminate this

+Agreement immediately, and with retroactive effect to the effective date.

+

+5. LIMITATION OF LIABILITY.  IN NO EVENT SHALL QTI, QTI's AFFILIATES OR ITS

+LICENSORS BE LIABLE TO YOU FOR ANY INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES,

+INCLUDING BUT NOT LIMITED TO ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL

+DAMAGES, ARISING OUT OF THE USE OR INABILITY TO USE, OR THE DELIVERY OR FAILURE

+TO DELIVER, ANY OF THE DELIVERABLES, OR ANY BREACH OF ANY OBLIGATION UNDER THIS

+AGREEMENT, EVEN IF QTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+THE FOREGOING LIMITATION OF LIABILITY SHALL REMAIN IN FULL FORCE AND EFFECT

+REGARDLESS OF WHETHER YOUR REMEDIES HEREUNDER ARE DETERMINED TO HAVE FAILED OF

+THEIR ESSENTIAL PURPOSE.  THE ENTIRE LIABILITY OF QTI, QTI's AFFILIATES AND ITS

+LICENSORS, AND THE SOLE AND EXCLUSIVE REMEDY OF YOU, FOR ANY CLAIM OR CAUSE OF

+ACTION ARISING HEREUNDER (WHETHER IN CONTRACT, TORT, OR OTHERWISE) SHALL NOT

+EXCEED US$50.

+

+6. INDEMNIFICATION.  You agree to indemnify and hold harmless QTI and its

+officers, directors, employees and successors and assigns against any and all

+third party claims, demands, causes of action, losses, liabilities, damages,

+costs and expenses, incurred by QTI (including but not limited to costs of

+defense, investigation and reasonable attorney's fees) arising out of, resulting

+from or related to: (i) any breach of this Agreement by You; and (ii) your acts,

+omissions, products and services.  If requested by QTI, You agree to defend QTI

+in connection with any third party claims, demands, or causes of action

+resulting from, arising out of or in connection with any of the foregoing.

+

+7. ASSIGNMENT.  You shall not assign this Agreement or any right or interest

+under this Agreement, nor delegate any obligation to be performed under this

+Agreement, without QTI's prior written consent.  For purposes of this Section 7,

+an "assignment" by You under this Section shall be deemed to include, without

+limitation, any merger, consolidation, sale of all or substantially all of its

+assets, or any substantial change in the management or control of You.

+Any attempted assignment in contravention of this Section 9 shall be void.

+QTI may freely assign this Agreement or delegate any or all of its rights and

+obligations hereunder to any third party.

+

+8. COMPLIANCE WITH LAWS; APPLICABLE LAW.  You agree to comply with all

+applicable local, international and national laws and regulations and with U.S.

+Export Administration Regulations, as they apply to the subject matter of this

+Agreement.  This Agreement is governed by the laws of the State of California,

+excluding California's choice of law rules.

+

+9. CONTRACTING PARTIES.  If the Materials are downloaded on any computer owned

+by a corporation or other legal entity, then this Agreement is formed by and

+between QTI and such entity.  The individual accepting the terms of this

+Agreement represents and warrants to QTI that they have the authority to bind

+such entity to the terms and conditions of this Agreement.

+

+10. MISCELLANEOUS PROVISIONS.  This Agreement, together with all exhibits

+attached hereto, which are incorporated herein by this reference, constitutes

+the entire agreement between QTI and You and supersedes all prior negotiations,

+representations and agreements between the parties with respect to the subject

+matter hereof.  No addition or modification of this Agreement shall be effective

+unless made in writing and signed by the respective representatives of QTI and

+You.  The restrictions, limitations, exclusions and conditions set forth in this

+Agreement shall apply even if QTI or any of its affiliates becomes aware of or

+fails to act in a manner to address any violation or failure to comply

+therewith.  You hereby acknowledge and agree that the restrictions, limitations,

+conditions and exclusions imposed in this Agreement on the rights granted in

+this Agreement are not a derogation of the benefits of such rights.  You further

+acknowledges that, in the absence of such restrictions, limitations, conditions

+and exclusions, QTI would not have entered into this Agreement with You.  Each

+party shall be responsible for and shall bear its own expenses in connection

+with this Agreement.  If any of the provisions of this Agreement are determined

+to be invalid, illegal, or otherwise unenforceable, the remaining provisions

+shall remain in full force and effect.  This Agreement is entered into solely

+in the English language, and if for any reason any other language version is

+prepared by any party, it shall be solely for convenience and the English

+version shall govern and control all aspects.  If You are located in the

+province of Quebec, Canada, the following applies: The Parties hereby confirm

+they have requested this Agreement and all related documents be prepared

+in English..
\ No newline at end of file
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/MD5SUMS.txt b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/MD5SUMS.txt
new file mode 100644
index 0000000..f954248
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/MD5SUMS.txt
@@ -0,0 +1,50 @@
+531857a19d5e802db7ee35400ebdda39  abl.elf
+71c6dd41e387ddb12c8553091928ec39  aop.mbn
+b6d81b360a5672d80c27430f39153e2c  boot-erase.img
+40e97319f57ab9d0b60009163ff940c2  BTFM.bin
+cbd3f7ab1a261c30e9e3178c0ec09428  cmnlib64.mbn
+7e89535018695c938593581134d14871  cmnlib.mbn
+32d0a65bdd9dc7b503676a1bdc4346a5  devcfg.mbn
+d5cf22da99f6a871d4c7d43ce8eb801a  dspso.bin
+4400827c0a6689bfe118a67d79b4fcd7  flashall
+6fdda3231e99ba8324bec09b9bb34238  gpt_backup0.bin
+30281439a182ec57bb116b6c0911ff6b  gpt_backup1.bin
+4348e67458ab0a5f3d857caac7d4fb13  gpt_backup2.bin
+94122e11939ad0dbf7ea353496b29d4f  gpt_backup3.bin
+c5b0b7ed073ab1885bf21da348ea9106  gpt_backup4.bin
+e1564c466be4b2fac4125f214be6dc96  gpt_backup5.bin
+6cad911b5774140c5838269297d7b67a  gpt_both0.bin
+b3157ad3ac65f24eed4ca03464f455f9  gpt_both1.bin
+8975544619a3771866407913fab2ccd7  gpt_both2.bin
+d601e030036e26a146420a003a50eb99  gpt_both3.bin
+191e9eb2fb6112a152d540523c9b722b  gpt_both4.bin
+d756bdf96eb604a35de2fc62e7e877e3  gpt_both5.bin
+761da7b8ca5e3b175ffc9d11b12e9bd6  gpt_main0.bin
+f6fbf11adfcd149901f7b385f372f24f  gpt_main1.bin
+ba6d04e1ff8b692bff1fd49789118ae7  gpt_main2.bin
+47bf786ee544b96e00bbab68ec3d4241  gpt_main3.bin
+6562d2c13ec71271edd4ba217c3c3870  gpt_main4.bin
+92452d54cc100a1bb0c1e50b5910745f  gpt_main5.bin
+94794668fb0a63c599e754cba52f6517  hyp.mbn
+35cc47772102f785807556e03135764a  imagefv.elf
+1fbaef77827cc531b5b7372ad1ee4937  keymaster64.mbn
+cbbe399f2c983ad51768f4561587f000  LICENSE
+c1c770a035a596c4b13a08789a76a137  patch0.xml
+0780990ee59934bdcaffc918cac99aed  patch1.xml
+81036277fd056a16c0e418a756a5a835  patch2.xml
+f1e955eeee449ed57767ac0b87552cf1  patch3.xml
+04859b2cf8561a9d54e85a01595c44bb  patch4.xml
+ab5847dcda2a52572616499f37ff1676  patch5.xml
+61e29ca7d21884af0e3a813d3bd0ade1  prog_firehose_ddr.elf
+57f570d8896ef6c0e55af6c3dc0940e1  qupv3fw.elf
+aea48fb241747a7db9741b05d2cc8a5e  rawprogram0.xml
+078978d92fc3c2a0ad0744e5e905e806  rawprogram1.xml
+e829b09f11eeed7f44caca1b592c91bf  rawprogram2.xml
+e03411d04b290ffe1ea9b993d1f23074  rawprogram3.xml
+394901123816bf4ea4ed31ad055a156a  rawprogram4.xml
+3640402754265a04aaff27ede61fa1c0  rawprogram5.xml
+21775907582b06389a656ab56011c160  sec.dat
+a09977823a706b04e851609cfe0a9113  storsec.mbn
+ce1bdfe85a34c3ce8f30f99e01a9f2af  tz.mbn
+3d4e3c711e9fcdb2513afefb4072ab69  xbl_config.elf
+53510083c9fc81d0e7b75e8f09c5c0ea  xbl.elf
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/abl.elf b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/abl.elf
new file mode 100644
index 0000000..4a5d7f9
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/abl.elf
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/aop.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/aop.mbn
new file mode 100644
index 0000000..59c3db6
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/aop.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/boot-erase.img b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/boot-erase.img
new file mode 100644
index 0000000..9e0f96a
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/boot-erase.img
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/cmnlib.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/cmnlib.mbn
new file mode 100644
index 0000000..f6a5688
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/cmnlib.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/cmnlib64.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/cmnlib64.mbn
new file mode 100644
index 0000000..3c1f8e0
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/cmnlib64.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/devcfg.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/devcfg.mbn
new file mode 100644
index 0000000..3f8e6ef
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/devcfg.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/dspso.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/dspso.bin
new file mode 100644
index 0000000..0468851
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/dspso.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/flashall b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/flashall
new file mode 100755
index 0000000..2c4db9e
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/flashall
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+fastboot flash partition:0 gpt_both0.bin
+fastboot flash partition:1 gpt_both1.bin
+fastboot flash partition:2 gpt_both2.bin
+fastboot flash partition:3 gpt_both3.bin
+fastboot flash partition:4 gpt_both4.bin
+fastboot flash partition:5 gpt_both5.bin
+
+fastboot flash ImageFv_a imagefv.elf
+fastboot flash aop_a aop.mbn
+fastboot flash bluetooth_a BTFM.bin
+fastboot flash cmnlib64_a cmnlib64.mbn
+fastboot flash cmnlib_a cmnlib.mbn
+fastboot erase ddr
+fastboot flash devcfg_a devcfg.mbn
+fastboot flash dsp_a dspso.bin
+fastboot flash hyp_a hyp.mbn
+fastboot flash keymaster_a keymaster64.mbn
+#fastboot flash logfs logfs_ufs_8mb.bin
+#fastboot flash modem_a NON-HLOS.bin
+fastboot flash qupfw_a qupv3fw.elf
+fastboot flash storsec_a storsec.mbn
+fastboot flash tz_a tz.mbn
+fastboot flash xbl_a xbl.elf
+fastboot flash xbl_config_a xbl_config.elf
+fastboot flash abl_a abl.elf
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup0.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup0.bin
new file mode 100644
index 0000000..a8d31d7
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup0.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup1.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup1.bin
new file mode 100644
index 0000000..91d90f0
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup1.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup2.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup2.bin
new file mode 100644
index 0000000..629a1af
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup2.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup3.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup3.bin
new file mode 100644
index 0000000..5c15335
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup3.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup4.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup4.bin
new file mode 100644
index 0000000..c8d1815
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup4.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup5.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup5.bin
new file mode 100644
index 0000000..5138a0b
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_backup5.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both0.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both0.bin
new file mode 100644
index 0000000..23e88d7
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both0.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both1.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both1.bin
new file mode 100644
index 0000000..8148ecb
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both1.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both2.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both2.bin
new file mode 100644
index 0000000..df1479e
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both2.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both3.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both3.bin
new file mode 100644
index 0000000..4ae8942
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both3.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both4.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both4.bin
new file mode 100644
index 0000000..cad3b85
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both4.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both5.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both5.bin
new file mode 100644
index 0000000..3180a75
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_both5.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main0.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main0.bin
new file mode 100644
index 0000000..eddb102
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main0.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main1.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main1.bin
new file mode 100644
index 0000000..8a28543
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main1.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main2.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main2.bin
new file mode 100644
index 0000000..fad7645
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main2.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main3.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main3.bin
new file mode 100644
index 0000000..ecd0efd
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main3.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main4.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main4.bin
new file mode 100644
index 0000000..ef68ad2
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main4.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main5.bin b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main5.bin
new file mode 100644
index 0000000..4aabafb
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/gpt_main5.bin
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/hyp.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/hyp.mbn
new file mode 100644
index 0000000..538dcc6
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/hyp.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/imagefv.elf b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/imagefv.elf
new file mode 100644
index 0000000..42107de
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/imagefv.elf
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/keymaster64.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/keymaster64.mbn
new file mode 100644
index 0000000..5bdd1a9
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/keymaster64.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch0.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch0.xml
new file mode 100644
index 0000000..3548ee3
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch0.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<patches>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Patching is in little endian format, i.e. 0xAABBCCDD will look like DD CC BB AA in the file or on disk-->
+  <!--NOTE: This file is used by Trace32 - So make sure to add decimals, i.e. 0x10-10=0, *but* 0x10-10.=6.-->
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="936" filename="gpt_main0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 8 'userdata' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="936" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 8 'userdata' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="936" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="0" value="NUM_DISK_SECTORS-6." what="Update last partition 8 'userdata' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="936" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-5." value="NUM_DISK_SECTORS-6." what="Update last partition 8 'userdata' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_main0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="gpt_main0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_main0.bin" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="4" start_sector="4" value="CRC32(0,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-5.,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main0.bin" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main0.bin" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="4" start_sector="4" value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup0.bin" physical_partition_number="0" size_in_bytes="4" start_sector="4" value="CRC32(4,92)" what="Update Backup Header with CRC of Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header."/>
+</patches>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch1.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch1.xml
new file mode 100644
index 0000000..f22f118
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch1.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<patches>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Patching is in little endian format, i.e. 0xAABBCCDD will look like DD CC BB AA in the file or on disk-->
+  <!--NOTE: This file is used by Trace32 - So make sure to add decimals, i.e. 0x10-10=0, *but* 0x10-10.=6.-->
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="gpt_main1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="0" value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-5." value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_main1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="gpt_main1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="DISK" physical_partition_number="1" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_main1.bin" physical_partition_number="1" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="1" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="4" start_sector="4" value="CRC32(0,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="1" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-5.,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main1.bin" physical_partition_number="1" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main1.bin" physical_partition_number="1" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="1" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="1" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="4" start_sector="4" value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup1.bin" physical_partition_number="1" size_in_bytes="4" start_sector="4" value="CRC32(4,92)" what="Update Backup Header with CRC of Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="1" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="1" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header."/>
+</patches>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch2.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch2.xml
new file mode 100644
index 0000000..3a21339
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch2.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<patches>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Patching is in little endian format, i.e. 0xAABBCCDD will look like DD CC BB AA in the file or on disk-->
+  <!--NOTE: This file is used by Trace32 - So make sure to add decimals, i.e. 0x10-10=0, *but* 0x10-10.=6.-->
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="gpt_main2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="0" value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="296" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-5." value="NUM_DISK_SECTORS-6." what="Update last partition 3 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_main2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="gpt_main2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="DISK" physical_partition_number="2" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_main2.bin" physical_partition_number="2" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="2" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="4" start_sector="4" value="CRC32(0,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="2" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-5.,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main2.bin" physical_partition_number="2" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main2.bin" physical_partition_number="2" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="2" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="2" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="4" start_sector="4" value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup2.bin" physical_partition_number="2" size_in_bytes="4" start_sector="4" value="CRC32(4,92)" what="Update Backup Header with CRC of Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="2" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="2" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header."/>
+</patches>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch3.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch3.xml
new file mode 100644
index 0000000..e818f40
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch3.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<patches>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Patching is in little endian format, i.e. 0xAABBCCDD will look like DD CC BB AA in the file or on disk-->
+  <!--NOTE: This file is used by Trace32 - So make sure to add decimals, i.e. 0x10-10=0, *but* 0x10-10.=6.-->
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="424" filename="gpt_main3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 4 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="424" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 4 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="424" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="0" value="NUM_DISK_SECTORS-6." what="Update last partition 4 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="424" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-5." value="NUM_DISK_SECTORS-6." what="Update last partition 4 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_main3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="gpt_main3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="DISK" physical_partition_number="3" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_main3.bin" physical_partition_number="3" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="3" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="4" start_sector="4" value="CRC32(0,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="3" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-5.,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main3.bin" physical_partition_number="3" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main3.bin" physical_partition_number="3" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="3" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="3" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="4" start_sector="4" value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup3.bin" physical_partition_number="3" size_in_bytes="4" start_sector="4" value="CRC32(4,92)" what="Update Backup Header with CRC of Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="3" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="3" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header."/>
+</patches>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch4.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch4.xml
new file mode 100644
index 0000000..b808e50
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch4.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<patches>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Patching is in little endian format, i.e. 0xAABBCCDD will look like DD CC BB AA in the file or on disk-->
+  <!--NOTE: This file is used by Trace32 - So make sure to add decimals, i.e. 0x10-10=0, *but* 0x10-10.=6.-->
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="2088" filename="gpt_main4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="3" value="NUM_DISK_SECTORS-6." what="Update last partition 49 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="2088" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="3" value="NUM_DISK_SECTORS-6." what="Update last partition 49 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="2088" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update last partition 49 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="2088" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-4." value="NUM_DISK_SECTORS-6." what="Update last partition 49 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_main4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="gpt_main4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="DISK" physical_partition_number="4" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_main4.bin" physical_partition_number="4" size_in_bytes="4" start_sector="1" value="CRC32(2,8192)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="4" size_in_bytes="4" start_sector="1" value="CRC32(2,8192)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="4" start_sector="4" value="CRC32(0,8192)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="4" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-5.,8192)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main4.bin" physical_partition_number="4" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main4.bin" physical_partition_number="4" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="4" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="4" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="4" start_sector="4" value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup4.bin" physical_partition_number="4" size_in_bytes="4" start_sector="4" value="CRC32(4,92)" what="Update Backup Header with CRC of Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="4" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="4" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header."/>
+</patches>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch5.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch5.xml
new file mode 100644
index 0000000..b9ff1fd
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/patch5.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<patches>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Patching is in little endian format, i.e. 0xAABBCCDD will look like DD CC BB AA in the file or on disk-->
+  <!--NOTE: This file is used by Trace32 - So make sure to add decimals, i.e. 0x10-10=0, *but* 0x10-10.=6.-->
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="1192" filename="gpt_main5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 10 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="1192" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="2" value="NUM_DISK_SECTORS-6." what="Update last partition 10 'last_parti' with actual size in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="1192" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="0" value="NUM_DISK_SECTORS-6." what="Update last partition 10 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="1192" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-5." value="NUM_DISK_SECTORS-6." what="Update last partition 10 'last_parti' with actual size in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_main5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-6." what="Update Primary Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="48" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-6." what="Update Backup Header with LastUseableLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="gpt_main5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="32" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="24" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="8" start_sector="4" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="72" filename="DISK" physical_partition_number="5" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-5." what="Update Backup Header with Partition Array Location."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_main5.bin" physical_partition_number="5" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="5" size_in_bytes="4" start_sector="1" value="CRC32(2,4096)" what="Update Primary Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="4" start_sector="4" value="CRC32(0,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="88" filename="DISK" physical_partition_number="5" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-5.,4096)" what="Update Backup Header with CRC of Partition Array."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main5.bin" physical_partition_number="5" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_main5.bin" physical_partition_number="5" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="5" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="5" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="4" start_sector="4" value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="gpt_backup5.bin" physical_partition_number="5" size_in_bytes="4" start_sector="4" value="CRC32(4,92)" what="Update Backup Header with CRC of Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="5" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header."/>
+  <patch SECTOR_SIZE_IN_BYTES="4096" byte_offset="16" filename="DISK" physical_partition_number="5" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header."/>
+</patches>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/prog_firehose_ddr.elf b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/prog_firehose_ddr.elf
new file mode 100644
index 0000000..15e2d4c
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/prog_firehose_ddr.elf
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/qupv3fw.elf b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/qupv3fw.elf
new file mode 100644
index 0000000..6236ec4
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/qupv3fw.elf
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram0.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram0.xml
new file mode 100644
index 0000000..f9ec76b
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram0.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" ?>
+<data>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Sector size is 4096bytes-->
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="persist" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x6000" start_sector="6"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="system_a" num_partition_sectors="1518216" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="6072864.0" sparse="false" start_byte_hex="0x2006000" start_sector="8198"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="system_b" num_partition_sectors="1518216" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="6072864.0" sparse="false" start_byte_hex="0x174a8e000" start_sector="1526414"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="super" num_partition_sectors="3036432" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="12145728.0" sparse="false" start_byte_hex="0x2e7516000" start_sector="3044630"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="systemrw" num_partition_sectors="4096" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="16384.0" sparse="false" start_byte_hex="0x5cca26000" start_sector="6081062"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="cache" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0x5cda26000" start_sector="6085158"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="metadata" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0x5d1a26000" start_sector="6101542"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="userdata" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="0" sparse="false" start_byte_hex="0x5d5a26000" start_sector="6117926"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_main0.bin" label="PrimaryGPT" num_partition_sectors="6" partofsingleimage="true" physical_partition_number="0" readbackverify="false" size_in_KB="24.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_backup0.bin" label="BackupGPT" num_partition_sectors="5" partofsingleimage="true" physical_partition_number="0" readbackverify="false" size_in_KB="20.0" sparse="false" start_byte_hex="(4096*NUM_DISK_SECTORS)-20480." start_sector="NUM_DISK_SECTORS-5."/>
+</data>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram1.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram1.xml
new file mode 100644
index 0000000..1793287
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram1.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?>
+<data>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Sector size is 4096bytes-->
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="xbl.elf" label="xbl_a" num_partition_sectors="896" partofsingleimage="false" physical_partition_number="1" readbackverify="false" size_in_KB="3584.0" sparse="false" start_byte_hex="0x6000" start_sector="6"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="xbl_config.elf" label="xbl_config_a" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="1" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x386000" start_sector="902"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="last_parti" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="1" readbackverify="false" size_in_KB="0" sparse="false" start_byte_hex="0x3a6000" start_sector="934"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_main1.bin" label="PrimaryGPT" num_partition_sectors="6" partofsingleimage="true" physical_partition_number="1" readbackverify="false" size_in_KB="24.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_backup1.bin" label="BackupGPT" num_partition_sectors="5" partofsingleimage="true" physical_partition_number="1" readbackverify="false" size_in_KB="20.0" sparse="false" start_byte_hex="(4096*NUM_DISK_SECTORS)-20480." start_sector="NUM_DISK_SECTORS-5."/>
+</data>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram2.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram2.xml
new file mode 100644
index 0000000..e8aa1b8
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram2.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?>
+<data>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Sector size is 4096bytes-->
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="xbl.elf" label="xbl_b" num_partition_sectors="896" partofsingleimage="false" physical_partition_number="2" readbackverify="false" size_in_KB="3584.0" sparse="false" start_byte_hex="0x6000" start_sector="6"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="xbl_config.elf" label="xbl_config_b" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="2" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x386000" start_sector="902"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="last_parti" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="2" readbackverify="false" size_in_KB="0" sparse="false" start_byte_hex="0x3a6000" start_sector="934"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_main2.bin" label="PrimaryGPT" num_partition_sectors="6" partofsingleimage="true" physical_partition_number="2" readbackverify="false" size_in_KB="24.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_backup2.bin" label="BackupGPT" num_partition_sectors="5" partofsingleimage="true" physical_partition_number="2" readbackverify="false" size_in_KB="20.0" sparse="false" start_byte_hex="(4096*NUM_DISK_SECTORS)-20480." start_sector="NUM_DISK_SECTORS-5."/>
+</data>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram3.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram3.xml
new file mode 100644
index 0000000..a37a8b4
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram3.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<data>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Sector size is 4096bytes-->
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="ALIGN_TO_128K_1" num_partition_sectors="26" partofsingleimage="false" physical_partition_number="3" readbackverify="false" size_in_KB="104.0" sparse="false" start_byte_hex="0x6000" start_sector="6"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="cdt" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="3" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x20000" start_sector="32"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="ddr" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="3" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x40000" start_sector="64"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="last_parti" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="3" readbackverify="false" size_in_KB="0" sparse="false" start_byte_hex="0x140000" start_sector="320"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_main3.bin" label="PrimaryGPT" num_partition_sectors="6" partofsingleimage="true" physical_partition_number="3" readbackverify="false" size_in_KB="24.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_backup3.bin" label="BackupGPT" num_partition_sectors="5" partofsingleimage="true" physical_partition_number="3" readbackverify="false" size_in_KB="20.0" sparse="false" start_byte_hex="(4096*NUM_DISK_SECTORS)-20480." start_sector="NUM_DISK_SECTORS-5."/>
+</data>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram4.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram4.xml
new file mode 100644
index 0000000..ff59828
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram4.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<data>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Sector size is 4096bytes-->
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="aop.mbn" label="aop_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x6000" start_sector="6"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="tz.mbn" label="tz_a" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0x86000" start_sector="134"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="hyp.mbn" label="hyp_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x286000" start_sector="646"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="modem_a" num_partition_sectors="30720" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="122880.0" sparse="false" start_byte_hex="0x306000" start_sector="774"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="BTFM.bin" label="bluetooth_a" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x7b06000" start_sector="31494"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="mdtpsecapp_a" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="4096.0" sparse="false" start_byte_hex="0x7c06000" start_sector="31750"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="mdtp_a" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x8006000" start_sector="32774"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="abl.elf" label="abl_a" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0xa006000" start_sector="40966"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="dspso.bin" label="dsp_a" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0xa106000" start_sector="41222"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="keymaster64.mbn" label="keymaster_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0xc106000" start_sector="49414"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="boot-erase.img" label="boot_a" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0xc186000" start_sector="49542"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="cmnlib.mbn" label="cmnlib_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x10186000" start_sector="65926"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="cmnlib64.mbn" label="cmnlib64_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x10206000" start_sector="66054"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="devcfg.mbn" label="devcfg_a" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x10286000" start_sector="66182"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="qupv3fw.elf" label="qupfw_a" num_partition_sectors="16" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="64.0" sparse="false" start_byte_hex="0x102a6000" start_sector="66214"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="storsec.mbn" label="storsec_a" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x102b6000" start_sector="66230"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="imagefv.elf" label="ImageFv_a" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x102d6000" start_sector="66262"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="aop.mbn" label="aop_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x103d6000" start_sector="66518"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="tz.mbn" label="tz_b" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0x10456000" start_sector="66646"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="hyp.mbn" label="hyp_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x10656000" start_sector="67158"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="modem_b" num_partition_sectors="30720" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="122880.0" sparse="false" start_byte_hex="0x106d6000" start_sector="67286"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="BTFM.bin" label="bluetooth_b" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x17ed6000" start_sector="98006"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="mdtpsecapp_b" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="4096.0" sparse="false" start_byte_hex="0x17fd6000" start_sector="98262"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="mdtp_b" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x183d6000" start_sector="99286"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="abl.elf" label="abl_b" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x1a3d6000" start_sector="107478"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="dspso.bin" label="dsp_b" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x1a4d6000" start_sector="107734"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="keymaster64.mbn" label="keymaster_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x1c4d6000" start_sector="115926"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="boot-erase.img" label="boot_b" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0x1c556000" start_sector="116054"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="cmnlib.mbn" label="cmnlib_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x20556000" start_sector="132438"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="cmnlib64.mbn" label="cmnlib64_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x205d6000" start_sector="132566"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="devcfg.mbn" label="devcfg_b" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x20656000" start_sector="132694"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="qupv3fw.elf" label="qupfw_b" num_partition_sectors="16" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="64.0" sparse="false" start_byte_hex="0x20676000" start_sector="132726"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="storsec.mbn" label="storsec_b" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x20686000" start_sector="132742"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="imagefv.elf" label="ImageFv_b" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x206a6000" start_sector="132774"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="sec.dat" label="sec" num_partition_sectors="4" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="16.0" sparse="false" start_byte_hex="0x207a6000" start_sector="133030"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="devinfo" num_partition_sectors="1" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="4.0" sparse="false" start_byte_hex="0x207aa000" start_sector="133034"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="dip" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x207ab000" start_sector="133035"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="fdemeta" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x208ab000" start_sector="133291"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="apdp" num_partition_sectors="64" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="256.0" sparse="false" start_byte_hex="0x2092b000" start_sector="133419"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="msadp" num_partition_sectors="64" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="256.0" sparse="false" start_byte_hex="0x2096b000" start_sector="133483"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="spunvm" num_partition_sectors="2048" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x209ab000" start_sector="133547"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="splash" num_partition_sectors="8356" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="33424.0" sparse="false" start_byte_hex="0x211ab000" start_sector="135595"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="limits" num_partition_sectors="1" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="4.0" sparse="false" start_byte_hex="0x2324f000" start_sector="143951"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="toolsfv" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x23250000" start_sector="143952"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="logfs_ufs_8mb.bin" label="logfs" num_partition_sectors="2048" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x23350000" start_sector="144208"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="sti" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0x23b50000" start_sector="146256"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="rawdump" num_partition_sectors="32768" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="131072.0" sparse="false" start_byte_hex="0x23d50000" start_sector="146768"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="logdump" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0x2bd50000" start_sector="179536"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="last_parti" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="4" readbackverify="false" size_in_KB="0" sparse="false" start_byte_hex="0x2fd50000" start_sector="195920"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_main4.bin" label="PrimaryGPT" num_partition_sectors="6" partofsingleimage="true" physical_partition_number="4" readbackverify="false" size_in_KB="24.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_backup4.bin" label="BackupGPT" num_partition_sectors="5" partofsingleimage="true" physical_partition_number="4" readbackverify="false" size_in_KB="20.0" sparse="false" start_byte_hex="(4096*NUM_DISK_SECTORS)-20480." start_sector="NUM_DISK_SECTORS-5."/>
+</data>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram5.xml b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram5.xml
new file mode 100644
index 0000000..ea653dd
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/rawprogram5.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<data>
+  <!--NOTE: This is an ** Autogenerated file **-->
+  <!--NOTE: Sector size is 4096bytes-->
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="ALIGN_TO_128K_2" num_partition_sectors="26" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="104.0" sparse="false" start_byte_hex="0x6000" start_sector="6"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="modemst1" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0x20000" start_sector="32"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="modemst2" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0x220000" start_sector="544"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="fsg" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0x420000" start_sector="1056"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="fsc" num_partition_sectors="32" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x620000" start_sector="1568"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="ssd" num_partition_sectors="2" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="8.0" sparse="false" start_byte_hex="0x640000" start_sector="1600"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="misc" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x642000" start_sector="1602"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="keystore" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x742000" start_sector="1858"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="frp" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x7c2000" start_sector="1986"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="" label="last_parti" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="5" readbackverify="false" size_in_KB="0" sparse="false" start_byte_hex="0x842000" start_sector="2114"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_main5.bin" label="PrimaryGPT" num_partition_sectors="6" partofsingleimage="true" physical_partition_number="5" readbackverify="false" size_in_KB="24.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
+  <program SECTOR_SIZE_IN_BYTES="4096" file_sector_offset="0" filename="gpt_backup5.bin" label="BackupGPT" num_partition_sectors="5" partofsingleimage="true" physical_partition_number="5" readbackverify="false" size_in_KB="20.0" sparse="false" start_byte_hex="(4096*NUM_DISK_SECTORS)-20480." start_sector="NUM_DISK_SECTORS-5."/>
+</data>
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/sec.dat b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/sec.dat
new file mode 100644
index 0000000..2fdcb45
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/sec.dat
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/storsec.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/storsec.mbn
new file mode 100644
index 0000000..768f20c
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/storsec.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/tz.mbn b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/tz.mbn
new file mode 100644
index 0000000..55cdf8f
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/tz.mbn
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/xbl.elf b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/xbl.elf
new file mode 100644
index 0000000..edcad9a
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/xbl.elf
Binary files differ
diff --git a/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/xbl_config.elf b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/xbl_config.elf
new file mode 100644
index 0000000..c9e7408
--- /dev/null
+++ b/installer/db845c/dragonboard-845c-bootloader-ufs-aosp/xbl_config.elf
Binary files differ
diff --git a/installer/db845c/flash-all-aosp.sh b/installer/db845c/flash-all-aosp.sh
new file mode 100755
index 0000000..182278a
--- /dev/null
+++ b/installer/db845c/flash-all-aosp.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+INSTALLER_DIR="`dirname ${0}`"
+
+FIRMWARE_DIR="dragonboard-845c-bootloader-ufs-aosp"
+
+# for cases that don't run "lunch db845c-userdebug"
+if [ -z "${ANDROID_BUILD_TOP}" ]; then
+    ANDROID_BUILD_TOP=${INSTALLER_DIR}/../../../../../
+    ANDROID_PRODUCT_OUT="${ANDROID_BUILD_TOP}/out/target/product/db845c"
+fi
+
+if [ ! -d "${ANDROID_PRODUCT_OUT}" ]; then
+    echo "FLASH-ALL-AOSP: error in locating out/target directory, check if it exist"
+    exit
+fi
+
+echo "android out dir:${ANDROID_PRODUCT_OUT}"
+
+# TODO: Pull one-time recovery/qdl path out of standard install
+# Flash bootloader firmware files
+if [ ! -d "${INSTALLER_DIR}/${FIRMWARE_DIR}/" ]; then
+    echo "FLASH-ALL-AOSP: No firmware directory? Make sure binaries have been provided"
+    exit
+fi
+
+pushd "${INSTALLER_DIR}/${FIRMWARE_DIR}" > /dev/null
+./flashall
+popd > /dev/null
+
+# Set HDMI monitor output
+echo "FLASH-ALL-AOSP: Set HDMI monitor output"
+fastboot oem select-display-panel foobar
+fastboot reboot bootloader
+
+# Slot _a is already marked as active by bootloader but just in case..
+echo "FLASH-ALL-AOSP: Mark _a slot as active"
+fastboot set_active a
+echo "FLASH-ALL-AOSP: Flash super/dynamic image"
+fastboot flash super "${ANDROID_PRODUCT_OUT}"/super.img
+echo "FLASH-ALL-AOSP: Flash userdata image"
+fastboot flash userdata "${ANDROID_PRODUCT_OUT}"/userdata.img
+
+if [ "$1" != "" ]; then
+    ANDROID_BUILD_TOP=${INSTALLER_DIR}/../../../../../
+    ANDROID_OUT_HOST_BIN="${ANDROID_BUILD_TOP}/out/host/linux-x86/bin"
+
+    if [ ! -d "${ANDROID_OUT_HOST_BIN}" ]; then
+        echo "FLASH-ALL-AOSP: error in locating out/host/ directory for mkbootimg, check if it exist"
+        echo "FLASH-ALL-AOSP: can't build boot image with user provided ${1} kernel image"
+        exit
+    fi
+
+    echo "FLASH-ALL-AOSP: Building boot image with user provided ${1} kernel image"
+    ${ANDROID_OUT_HOST_BIN}/mkbootimg --kernel ${1} --ramdisk ${ANDROID_PRODUCT_OUT}/ramdisk.img --base 0x80000000 --pagesize 2048 --cmdline "firmware_class.path=/vendor/firmware/ androidboot.hardware=db845c init=/init androidboot.boot_devices=soc/1d84000.ufshc printk.devkmsg=on buildvariant=userdebug" --output ${ANDROID_PRODUCT_OUT}/boot.img
+
+    echo "FLASH-ALL-AOSP: Flash boot image"
+    fastboot flash boot ${ANDROID_PRODUCT_OUT}/boot.img
+    fastboot reboot
+fi
diff --git a/installer/db845c/qdl b/installer/db845c/qdl
new file mode 100755
index 0000000..3eedf67
--- /dev/null
+++ b/installer/db845c/qdl
Binary files differ
diff --git a/installer/db845c/recovery.sh b/installer/db845c/recovery.sh
new file mode 100644
index 0000000..20fd45c
--- /dev/null
+++ b/installer/db845c/recovery.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+INSTALLER_DIR="`dirname ${0}`"
+
+QDL="`readlink -f ${INSTALLER_DIR}/qdl`"
+FIRMWARE_DIR="dragonboard-845c-bootloader-ufs-aosp"
+
+# for cases that don't run "lunch db845c-userdebug"
+if [ -z "${ANDROID_BUILD_TOP}" ]; then
+    ANDROID_BUILD_TOP=${INSTALLER_DIR}/../../../../../
+    ANDROID_PRODUCT_OUT="${ANDROID_BUILD_TOP}/out/target/product/db845c"
+fi
+
+if [ ! -d "${ANDROID_PRODUCT_OUT}" ]; then
+    echo "RECOVERY: error in locating out directory, check if it exist"
+    exit
+fi
+
+echo "android out dir:${ANDROID_PRODUCT_OUT}"
+
+# TODO: Pull one-time recovery/qdl path out of standard install
+# Flash bootloader firmware files
+if [ ! -d "${INSTALLER_DIR}/${FIRMWARE_DIR}/" ]; then
+    echo "RECOVERY: No firmware directory? Make sure binaries have been provided"
+    exit
+fi
+
+pushd "${INSTALLER_DIR}/${FIRMWARE_DIR}" > /dev/null
+sudo "${QDL}" prog_firehose_ddr.elf rawprogram[012345].xml patch[012345].xml
+popd > /dev/null
+
+echo
+echo
+echo "RECOVERY: Please boot the db845c into fastboot mode, and use the flash-all-aosp.sh script!"
+echo