diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/bcma/driver_chipcommon.c | 23 | ||||
| -rw-r--r-- | drivers/bcma/driver_chipcommon_pmu.c | 5 | ||||
| -rw-r--r-- | drivers/bcma/driver_mips.c | 26 | ||||
| -rw-r--r-- | drivers/bcma/main.c | 8 | 
4 files changed, 45 insertions, 17 deletions
| diff --git a/drivers/bcma/driver_chipcommon.c b/drivers/bcma/driver_chipcommon.c index a4c3ebcc4c86..ffd74e51f02d 100644 --- a/drivers/bcma/driver_chipcommon.c +++ b/drivers/bcma/driver_chipcommon.c @@ -22,12 +22,9 @@ static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset,  	return value;  } -void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) +void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc)  { -	u32 leddc_on = 10; -	u32 leddc_off = 90; - -	if (cc->setup_done) +	if (cc->early_setup_done)  		return;  	if (cc->core->id.rev >= 11) @@ -36,6 +33,22 @@ void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)  	if (cc->core->id.rev >= 35)  		cc->capabilities_ext = bcma_cc_read32(cc, BCMA_CC_CAP_EXT); +	if (cc->capabilities & BCMA_CC_CAP_PMU) +		bcma_pmu_early_init(cc); + +	cc->early_setup_done = true; +} + +void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) +{ +	u32 leddc_on = 10; +	u32 leddc_off = 90; + +	if (cc->setup_done) +		return; + +	bcma_core_chipcommon_early_init(cc); +  	if (cc->core->id.rev >= 20) {  		bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0);  		bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0); diff --git a/drivers/bcma/driver_chipcommon_pmu.c b/drivers/bcma/driver_chipcommon_pmu.c index 201faf106b3f..a63ddd9c70eb 100644 --- a/drivers/bcma/driver_chipcommon_pmu.c +++ b/drivers/bcma/driver_chipcommon_pmu.c @@ -144,7 +144,7 @@ static void bcma_pmu_workarounds(struct bcma_drv_cc *cc)  	}  } -void bcma_pmu_init(struct bcma_drv_cc *cc) +void bcma_pmu_early_init(struct bcma_drv_cc *cc)  {  	u32 pmucap; @@ -153,7 +153,10 @@ void bcma_pmu_init(struct bcma_drv_cc *cc)  	bcma_debug(cc->core->bus, "Found rev %u PMU (capabilities 0x%08X)\n",  		   cc->pmu.rev, pmucap); +} +void bcma_pmu_init(struct bcma_drv_cc *cc) +{  	if (cc->pmu.rev == 1)  		bcma_cc_mask32(cc, BCMA_CC_PMU_CTL,  			      ~BCMA_CC_PMU_CTL_NOILPONW); diff --git a/drivers/bcma/driver_mips.c b/drivers/bcma/driver_mips.c index cc65b45b4368..f44f1fb67011 100644 --- a/drivers/bcma/driver_mips.c +++ b/drivers/bcma/driver_mips.c @@ -212,16 +212,33 @@ static void bcma_core_mips_flash_detect(struct bcma_drv_mips *mcore)  	}  } +void bcma_core_mips_early_init(struct bcma_drv_mips *mcore) +{ +	struct bcma_bus *bus = mcore->core->bus; + +	if (mcore->early_setup_done) +		return; + +	bcma_chipco_serial_init(&bus->drv_cc); +	bcma_core_mips_flash_detect(mcore); + +	mcore->early_setup_done = true; +} +  void bcma_core_mips_init(struct bcma_drv_mips *mcore)  {  	struct bcma_bus *bus;  	struct bcma_device *core;  	bus = mcore->core->bus; +	if (mcore->setup_done) +		return; +  	bcma_info(bus, "Initializing MIPS core...\n"); -	if (!mcore->setup_done) -		mcore->assigned_irqs = 1; +	bcma_core_mips_early_init(mcore); + +	mcore->assigned_irqs = 1;  	/* Assign IRQs to all cores on the bus */  	list_for_each_entry(core, &bus->cores, list) { @@ -256,10 +273,5 @@ void bcma_core_mips_init(struct bcma_drv_mips *mcore)  	bcma_info(bus, "IRQ reconfiguration done\n");  	bcma_core_mips_dump_irq(bus); -	if (mcore->setup_done) -		return; - -	bcma_chipco_serial_init(&bus->drv_cc); -	bcma_core_mips_flash_detect(mcore);  	mcore->setup_done = true;  } diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c index 432aeeedfd5e..bea2d7cfa6c2 100644 --- a/drivers/bcma/main.c +++ b/drivers/bcma/main.c @@ -274,18 +274,18 @@ int __init bcma_bus_early_register(struct bcma_bus *bus,  		return -1;  	} -	/* Init CC core */ +	/* Early init CC core */  	core = bcma_find_core(bus, bcma_cc_core_id(bus));  	if (core) {  		bus->drv_cc.core = core; -		bcma_core_chipcommon_init(&bus->drv_cc); +		bcma_core_chipcommon_early_init(&bus->drv_cc);  	} -	/* Init MIPS core */ +	/* Early init MIPS core */  	core = bcma_find_core(bus, BCMA_CORE_MIPS_74K);  	if (core) {  		bus->drv_mips.core = core; -		bcma_core_mips_init(&bus->drv_mips); +		bcma_core_mips_early_init(&bus->drv_mips);  	}  	bcma_info(bus, "Early bus registered\n"); |