Search Linux Wireless

Re: [PATCH V2] bcma: clean bus initialization code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <zajec5@xxxxxxxxx>

Signed-off-by: Hauke Mehrtens <hauke@xxxxxxxxxx>

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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux