bcm53xx: fix loading SPROM content by bcma init change
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 44367
This commit is contained in:
		| @@ -0,0 +1,70 @@ | |||||||
|  | From 666bdfc027cde41a171862dc698987a378c8b66a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> | ||||||
|  | Date: Mon, 9 Feb 2015 18:00:42 +0100 | ||||||
|  | Subject: [PATCH RFC] bcma: use two different initcalls if built-in | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | This is needed as we can't initialize bus during fs_initcall. | ||||||
|  | Initialization requires SPROM which depends on NVRAM which depends on | ||||||
|  | mtd. Since mtd, spi, nand, spi-nor use standard module_init, we have to | ||||||
|  | do the same in bcma. | ||||||
|  | Without this we'll try to initialize SPROM without having a ready SPROM | ||||||
|  | proviver registered using bcma_arch_register_fallback_sprom. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | ||||||
|  | --- | ||||||
|  | While this patch seems to work and I can compile bcma as built-in and | ||||||
|  | module, I'm not too proud of it. I don't really like these #if(n)def | ||||||
|  | tricks and I'm afraid bcma_modinit may be called even if | ||||||
|  | bcma_modinit_early failed. | ||||||
|  |  | ||||||
|  | Do you see any better idea of solving this? | ||||||
|  | --- | ||||||
|  |  drivers/bcma/main.c | 16 ++++++++++++++-- | ||||||
|  |  1 file changed, 14 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c | ||||||
|  | index 9635f10..c394207 100644 | ||||||
|  | --- a/drivers/bcma/main.c | ||||||
|  | +++ b/drivers/bcma/main.c | ||||||
|  | @@ -639,13 +639,25 @@ static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env) | ||||||
|  |  			      core->id.rev, core->id.class); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/* Bus has to be registered early, before any bcma driver */ | ||||||
|  | +static int __init bcma_modinit_early(void) | ||||||
|  | +{ | ||||||
|  | +	return bus_register(&bcma_bus_type); | ||||||
|  | +} | ||||||
|  | +#ifndef MODULE | ||||||
|  | +fs_initcall(bcma_modinit_early); | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Initialization has to be done later with SPI/mtd/NAND/SPROM available */ | ||||||
|  |  static int __init bcma_modinit(void) | ||||||
|  |  { | ||||||
|  |  	int err; | ||||||
|  |   | ||||||
|  | -	err = bus_register(&bcma_bus_type); | ||||||
|  | +#ifdef MODULE | ||||||
|  | +	err = bcma_modinit_early(); | ||||||
|  |  	if (err) | ||||||
|  |  		return err; | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	err = bcma_host_soc_register_driver(); | ||||||
|  |  	if (err) { | ||||||
|  | @@ -662,7 +674,7 @@ static int __init bcma_modinit(void) | ||||||
|  |   | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  | -fs_initcall(bcma_modinit); | ||||||
|  | +module_init(bcma_modinit); | ||||||
|  |   | ||||||
|  |  static void __exit bcma_modexit(void) | ||||||
|  |  { | ||||||
|  | --  | ||||||
|  | 1.8.4.5 | ||||||
|  |  | ||||||
| @@ -0,0 +1,70 @@ | |||||||
|  | From 666bdfc027cde41a171862dc698987a378c8b66a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> | ||||||
|  | Date: Mon, 9 Feb 2015 18:00:42 +0100 | ||||||
|  | Subject: [PATCH RFC] bcma: use two different initcalls if built-in | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | This is needed as we can't initialize bus during fs_initcall. | ||||||
|  | Initialization requires SPROM which depends on NVRAM which depends on | ||||||
|  | mtd. Since mtd, spi, nand, spi-nor use standard module_init, we have to | ||||||
|  | do the same in bcma. | ||||||
|  | Without this we'll try to initialize SPROM without having a ready SPROM | ||||||
|  | proviver registered using bcma_arch_register_fallback_sprom. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | ||||||
|  | --- | ||||||
|  | While this patch seems to work and I can compile bcma as built-in and | ||||||
|  | module, I'm not too proud of it. I don't really like these #if(n)def | ||||||
|  | tricks and I'm afraid bcma_modinit may be called even if | ||||||
|  | bcma_modinit_early failed. | ||||||
|  |  | ||||||
|  | Do you see any better idea of solving this? | ||||||
|  | --- | ||||||
|  |  drivers/bcma/main.c | 16 ++++++++++++++-- | ||||||
|  |  1 file changed, 14 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c | ||||||
|  | index 9635f10..c394207 100644 | ||||||
|  | --- a/drivers/bcma/main.c | ||||||
|  | +++ b/drivers/bcma/main.c | ||||||
|  | @@ -639,13 +639,25 @@ static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env) | ||||||
|  |  			      core->id.rev, core->id.class); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/* Bus has to be registered early, before any bcma driver */ | ||||||
|  | +static int __init bcma_modinit_early(void) | ||||||
|  | +{ | ||||||
|  | +	return bus_register(&bcma_bus_type); | ||||||
|  | +} | ||||||
|  | +#ifndef MODULE | ||||||
|  | +fs_initcall(bcma_modinit_early); | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Initialization has to be done later with SPI/mtd/NAND/SPROM available */ | ||||||
|  |  static int __init bcma_modinit(void) | ||||||
|  |  { | ||||||
|  |  	int err; | ||||||
|  |   | ||||||
|  | -	err = bus_register(&bcma_bus_type); | ||||||
|  | +#ifdef MODULE | ||||||
|  | +	err = bcma_modinit_early(); | ||||||
|  |  	if (err) | ||||||
|  |  		return err; | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	err = bcma_host_soc_register_driver(); | ||||||
|  |  	if (err) { | ||||||
|  | @@ -662,7 +674,7 @@ static int __init bcma_modinit(void) | ||||||
|  |   | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  | -fs_initcall(bcma_modinit); | ||||||
|  | +module_init(bcma_modinit); | ||||||
|  |   | ||||||
|  |  static void __exit bcma_modexit(void) | ||||||
|  |  { | ||||||
|  | --  | ||||||
|  | 1.8.4.5 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki