LCOV - code coverage report
Current view: top level - drivers/bcma - driver_chipcommon_b.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 18 0.0 %
Date: 2022-04-01 14:58:12 Functions: 0 3 0.0 %
Branches: 0 6 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * Broadcom specific AMBA
       3                 :            :  * ChipCommon B Unit driver
       4                 :            :  *
       5                 :            :  * Copyright 2014, Hauke Mehrtens <hauke@hauke-m.de>
       6                 :            :  *
       7                 :            :  * Licensed under the GNU/GPL. See COPYING for details.
       8                 :            :  */
       9                 :            : 
      10                 :            : #include "bcma_private.h"
      11                 :            : #include <linux/export.h>
      12                 :            : #include <linux/bcma/bcma.h>
      13                 :            : 
      14                 :            : static bool bcma_wait_reg(struct bcma_bus *bus, void __iomem *addr, u32 mask,
      15                 :            :                           u32 value, int timeout)
      16                 :            : {
      17                 :            :         unsigned long deadline = jiffies + timeout;
      18                 :            :         u32 val;
      19                 :            : 
      20                 :            :         do {
      21                 :            :                 val = readl(addr);
      22                 :            :                 if ((val & mask) == value)
      23                 :            :                         return true;
      24                 :            :                 cpu_relax();
      25                 :            :                 udelay(10);
      26                 :            :         } while (!time_after_eq(jiffies, deadline));
      27                 :            : 
      28                 :            :         bcma_err(bus, "Timeout waiting for register %p\n", addr);
      29                 :            : 
      30                 :            :         return false;
      31                 :            : }
      32                 :            : 
      33                 :          0 : void bcma_chipco_b_mii_write(struct bcma_drv_cc_b *ccb, u32 offset, u32 value)
      34                 :            : {
      35                 :          0 :         struct bcma_bus *bus = ccb->core->bus;
      36                 :          0 :         void __iomem *mii = ccb->mii;
      37                 :            : 
      38                 :          0 :         writel(offset, mii + BCMA_CCB_MII_MNG_CTL);
      39                 :          0 :         bcma_wait_reg(bus, mii + BCMA_CCB_MII_MNG_CTL, 0x0100, 0x0000, 100);
      40                 :          0 :         writel(value, mii + BCMA_CCB_MII_MNG_CMD_DATA);
      41                 :          0 :         bcma_wait_reg(bus, mii + BCMA_CCB_MII_MNG_CTL, 0x0100, 0x0000, 100);
      42                 :          0 : }
      43                 :            : EXPORT_SYMBOL_GPL(bcma_chipco_b_mii_write);
      44                 :            : 
      45                 :          0 : int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb)
      46                 :            : {
      47         [ #  # ]:          0 :         if (ccb->setup_done)
      48                 :            :                 return 0;
      49                 :            : 
      50                 :          0 :         ccb->setup_done = 1;
      51                 :          0 :         ccb->mii = ioremap(ccb->core->addr_s[1], BCMA_CORE_SIZE);
      52         [ #  # ]:          0 :         if (!ccb->mii)
      53                 :          0 :                 return -ENOMEM;
      54                 :            : 
      55                 :            :         return 0;
      56                 :            : }
      57                 :            : 
      58                 :          0 : void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b *ccb)
      59                 :            : {
      60         [ #  # ]:          0 :         if (ccb->mii)
      61                 :          0 :                 iounmap(ccb->mii);
      62                 :          0 : }

Generated by: LCOV version 1.14