]> rtime.felk.cvut.cz Git - vajnamar/linux-xlnx.git/commitdiff
fpga manager: Adopted Device-Key Encrypted BitStream loading support for Xilinx zynqmp.
authorNava kishore Manne <nava.manne@xilinx.com>
Mon, 29 May 2017 05:55:00 +0000 (11:25 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 20 Jun 2017 12:13:40 +0000 (14:13 +0200)
This commit adds Device-Key Encrypted BitStream Loading support
for the Xilinx ZynqMp chip.

Signed-off-by: Nava kishore Manne <navam@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/fpga/zynqmp-fpga.c

index 14ac72159374df666ead22ecc6365e2fa6598923..640426767619e9d24eadea2d9b8b0ad1fd492f30 100644 (file)
@@ -25,7 +25,8 @@
 /* Constant Definitions */
 #define IXR_FPGA_DONE_MASK     0X00000008U
 #define IXR_FPGA_AUTHENTICATIN 0x00000004U
-#define IXR_FPGA_ENCRYPTION_EN 0x00000008U
+#define IXR_FPGA_ENCRYPTION_USRKEY_EN  0x00000008U
+#define IXR_FPGA_ENCRYPTION_DEVKEY_EN  0x00000010U
 
 struct zynqmp_fpga_priv {
        struct device *dev;
@@ -58,7 +59,9 @@ static int zynqmp_fpga_ops_write(struct fpga_manager *mgr,
 
        if (mgr->flags & IXR_FPGA_AUTHENTICATIN)
                dma_size = dma_size + SIGNATURE_LEN + PUBLIC_KEY_LEN;
-       if (mgr->flags & IXR_FPGA_ENCRYPTION_EN)
+       if (mgr->flags & IXR_FPGA_ENCRYPTION_DEVKEY_EN)
+               dma_size = dma_size + ENCRYPTED_IV_LEN;
+       else if (mgr->flags & IXR_FPGA_ENCRYPTION_USRKEY_EN)
                dma_size = dma_size + ENCRYPTED_KEY_LEN + ENCRYPTED_IV_LEN;
 
        kbuf = dma_alloc_coherent(priv->dev, dma_size, &dma_addr, GFP_KERNEL);
@@ -72,7 +75,9 @@ static int zynqmp_fpga_ops_write(struct fpga_manager *mgr,
                memcpy(kbuf + size + SIGNATURE_LEN, mgr->pubkey,
                                                PUBLIC_KEY_LEN);
        }
-       if (mgr->flags & IXR_FPGA_ENCRYPTION_EN) {
+       if (mgr->flags & IXR_FPGA_ENCRYPTION_DEVKEY_EN)
+               memcpy(kbuf + size, mgr->iv, ENCRYPTED_IV_LEN);
+       else if (mgr->flags & IXR_FPGA_ENCRYPTION_USRKEY_EN) {
                memcpy(kbuf + size, mgr->key, ENCRYPTED_KEY_LEN);
                memcpy(kbuf + size + ENCRYPTED_KEY_LEN, mgr->iv,
                                                ENCRYPTED_IV_LEN);