On 01/16/2015 08:59 PM, Rafał Miłecki wrote:
> This moves main bus init code to the main.c and renames old function to
> make its purpose clear.
> Thanks to this change we'll also be able to separate scanning from
> registration (and support PCIe Gen 2 devices) in the future.
> 
> Signed-off-by: Rafał Miłecki <zaj...@gmail.com>

Signed-off-by: Hauke Mehrtens <ha...@hauke-m.de>

This should also fix the problem that the bus number in the early init
part was wrongly set to 0. I saw this on a SoC with BCMA as main bus and
some PCIe cards with bcma on it.

> ---
> V2: Fix typo (s/initialiation/initialization/)
>     Put bcma_detect_chip earlier in .h to match order in .c
> ---
>  drivers/bcma/bcma_private.h |  3 ++-
>  drivers/bcma/main.c         | 16 ++++++++++++----
>  drivers/bcma/scan.c         |  5 +----
>  3 files changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/bcma/bcma_private.h b/drivers/bcma/bcma_private.h
> index 314ae40..59422b5 100644
> --- a/drivers/bcma/bcma_private.h
> +++ b/drivers/bcma/bcma_private.h
> @@ -25,6 +25,7 @@ struct bcma_bus;
>  bool bcma_wait_value(struct bcma_device *core, u16 reg, u32 mask, u32 value,
>                    int timeout);
>  void bcma_prepare_core(struct bcma_bus *bus, struct bcma_device *core);
> +void bcma_init_bus(struct bcma_bus *bus);
>  int bcma_bus_register(struct bcma_bus *bus);
>  void bcma_bus_unregister(struct bcma_bus *bus);
>  int __init bcma_bus_early_register(struct bcma_bus *bus,
> @@ -36,11 +37,11 @@ int bcma_bus_resume(struct bcma_bus *bus);
>  #endif
>  
>  /* scan.c */
> +void bcma_detect_chip(struct bcma_bus *bus);
>  int bcma_bus_scan(struct bcma_bus *bus);
>  int __init bcma_bus_scan_early(struct bcma_bus *bus,
>                              struct bcma_device_id *match,
>                              struct bcma_device *core);
> -void bcma_init_bus(struct bcma_bus *bus);
>  
>  /* sprom.c */
>  int bcma_sprom_get(struct bcma_bus *bus);
> diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
> index 534e133..c166d44 100644
> --- a/drivers/bcma/main.c
> +++ b/drivers/bcma/main.c
> @@ -268,6 +268,18 @@ void bcma_prepare_core(struct bcma_bus *bus, struct 
> bcma_device *core)
>       }
>  }
>  
> +void bcma_init_bus(struct bcma_bus *bus)
> +{
> +     mutex_lock(&bcma_buses_mutex);
> +     bus->num = bcma_bus_next_num++;
> +     mutex_unlock(&bcma_buses_mutex);
> +
> +     INIT_LIST_HEAD(&bus->cores);
> +     bus->nr_cores = 0;
> +
> +     bcma_detect_chip(bus);
> +}
> +
>  static void bcma_register_core(struct bcma_bus *bus, struct bcma_device 
> *core)
>  {
>       int err;
> @@ -369,10 +381,6 @@ int bcma_bus_register(struct bcma_bus *bus)
>       int err;
>       struct bcma_device *core;
>  
> -     mutex_lock(&bcma_buses_mutex);
> -     bus->num = bcma_bus_next_num++;
> -     mutex_unlock(&bcma_buses_mutex);
> -
>       /* Scan for devices (cores) */
>       err = bcma_bus_scan(bus);
>       if (err) {
> diff --git a/drivers/bcma/scan.c b/drivers/bcma/scan.c
> index 9175207..5328ee5 100644
> --- a/drivers/bcma/scan.c
> +++ b/drivers/bcma/scan.c
> @@ -435,15 +435,12 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 
> __iomem **eromptr,
>       return 0;
>  }
>  
> -void bcma_init_bus(struct bcma_bus *bus)
> +void bcma_detect_chip(struct bcma_bus *bus)
>  {
>       s32 tmp;
>       struct bcma_chipinfo *chipinfo = &(bus->chipinfo);
>       char chip_id[8];
>  
> -     INIT_LIST_HEAD(&bus->cores);
> -     bus->nr_cores = 0;
> -
>       bcma_scan_switch_core(bus, BCMA_ADDR_BASE);
>  
>       tmp = bcma_scan_read32(bus, 0, BCMA_CC_ID);
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to