crypto: crypto4xx - Perform read/modify/write on device control register
[deliverable/linux.git] / drivers / crypto / amcc / crypto4xx_core.c
index 18912521a7a585571a6a23a1d7d4782d453b6642..1d103f997dc21b7c175e4b4d2eae4199974b279c 100644 (file)
@@ -51,6 +51,7 @@ static void crypto4xx_hw_init(struct crypto4xx_device *dev)
        union ce_io_threshold io_threshold;
        u32 rand_num;
        union ce_pe_dma_cfg pe_dma_cfg;
+       u32 device_ctrl;
 
        writel(PPC4XX_BYTE_ORDER, dev->ce_base + CRYPTO4XX_BYTE_ORDER_CFG);
        /* setup pe dma, include reset sg, pdr and pe, then release reset */
@@ -84,7 +85,9 @@ static void crypto4xx_hw_init(struct crypto4xx_device *dev)
        writel(ring_size.w, dev->ce_base + CRYPTO4XX_RING_SIZE);
        ring_ctrl.w = 0;
        writel(ring_ctrl.w, dev->ce_base + CRYPTO4XX_RING_CTRL);
-       writel(PPC4XX_DC_3DES_EN, dev->ce_base + CRYPTO4XX_DEVICE_CTRL);
+       device_ctrl = readl(dev->ce_base + CRYPTO4XX_DEVICE_CTRL);
+       device_ctrl |= PPC4XX_DC_3DES_EN;
+       writel(device_ctrl, dev->ce_base + CRYPTO4XX_DEVICE_CTRL);
        writel(dev->gdr_pa, dev->ce_base + CRYPTO4XX_GATH_RING_BASE);
        writel(dev->sdr_pa, dev->ce_base + CRYPTO4XX_SCAT_RING_BASE);
        part_ring_size.w = 0;
This page took 0.025811 seconds and 5 git commands to generate.