Changeset 11650
- Timestamp:
- 02/18/09 17:39:58 (4 years ago)
- Location:
- src/linux/brcm/linux.v24_2/arch/mips/bcm947xx
- Files:
-
- 9 edited
-
bcmsrom.c (modified) (2 diffs)
-
bcmutils.c (modified) (1 diff)
-
hndpci.c (modified) (2 diffs)
-
hndpmu.c (modified) (3 diffs)
-
include/bcmsrom.h (modified) (1 diff)
-
include/pcicfg.h (modified) (1 diff)
-
include/sbconfig.h (modified) (1 diff)
-
sbutils.c (modified) (3 diffs)
-
setup.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/bcmsrom.c
r10444 r11650 1405 1405 {"rxchain", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_RXCHAIN_MASK}, 1406 1406 {"antswitch", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_SWITCH_MASK}, 1407 {"tssipos2g", 0xffffff00, 0, SROM8_FEM2G, SROM8_FEM_TSSIPOS_MASK}, 1408 {"extpagain2g", 0xffffff00, 0, SROM8_FEM2G, SROM8_FEM_EXTPA_GAIN_MASK}, 1409 {"pdetrange2g", 0xffffff00, 0, SROM8_FEM2G, SROM8_FEM_PDET_RANGE_MASK}, 1410 {"triso2g", 0xffffff00, 0, SROM8_FEM2G, SROM8_FEM_TR_ISO_MASK}, 1411 {"antswctl2g", 0xffffff00, 0, SROM8_FEM2G, SROM8_FEM_ANTSWLUT_MASK}, 1412 {"tssipos5g", 0xffffff00, 0, SROM8_FEM5G, SROM8_FEM_TSSIPOS_MASK}, 1413 {"extpagain5g", 0xffffff00, 0, SROM8_FEM5G, SROM8_FEM_EXTPA_GAIN_MASK}, 1414 {"pdetrange5g", 0xffffff00, 0, SROM8_FEM5G, SROM8_FEM_PDET_RANGE_MASK}, 1415 {"triso5g", 0xffffff00, 0, SROM8_FEM5G, SROM8_FEM_TR_ISO_MASK}, 1416 {"antswctl5g", 0xffffff00, 0, SROM8_FEM5G, SROM8_FEM_ANTSWLUT_MASK}, 1407 1417 {"txpid2ga0", 0x000000f0, 0, SROM4_TXPID2G, 0xff}, 1408 1418 {"txpid2ga1", 0x000000f0, 0, SROM4_TXPID2G, 0xff00}, … … 1783 1793 1784 1794 if ((srom[SROM4_SIGN] == SROM4_SIGNATURE) || 1785 (( sbh->buscoretype == SB_PCIE) && (sbh->buscorerev >= 6)))1795 (((sbh->buscoretype == SB_PCIE) && (sbh->buscorerev >= 6)) || ((sbh->buscoretype == SB_PCI) && (sbh->buscorerev >= 0xe)))) 1786 1796 { 1787 1797 /* sromrev >= 4, read more */ -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/bcmutils.c
r10444 r11650 45 45 static char *nvram_vars = NULL; 46 46 static int vars_len = -1; 47 48 /* count segments of a chained packet */ 49 uint 50 pktsegcnt(osl_t *osh, void *p) 51 { 52 uint cnt; 53 54 for (cnt = 0; p; p = PKTNEXT(osh, p)) 55 cnt++; 56 57 return cnt; 58 } 47 59 48 60 /* copy a pkt buffer chain into a buffer */ -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/hndpci.c
r8761 r11650 195 195 if (pci_disabled) 196 196 val = 0xffffffff; 197 else if (bus == 1 && dev == pci_hbslot && func == 0&&197 else if (bus == 1 && dev == pci_hbslot && (func == 0 || func == 1) && 198 198 sb_pcihb_read_config (sbh, bus, dev, func, off, ®, &val)) 199 199 ; … … 244 244 if (pci_disabled) 245 245 return 0; 246 else if (bus == 1 && dev == pci_hbslot && func == 0&&246 else if (bus == 1 && dev == pci_hbslot && (func == 0 || func == 1) && 247 247 sb_pcihb_read_config (sbh, bus, dev, func, off, ®, &val)) 248 248 ; -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/hndpmu.c
r10444 r11650 47 47 static uint32 sb_pmu1_alpclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc); 48 48 #endif 49 50 void 51 sb_pmu_chipcontrol(sb_t *sih, uint reg, uint32 mask, uint32 val) 52 { 53 sb_corereg(sih, SB_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol_addr), ~0, reg); 54 sb_corereg(sih, SB_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol_data), mask, val); 55 } 49 56 50 57 /* Setup switcher voltage */ … … 179 186 } 180 187 181 uint16 BCMINITFN (sb_pmu_fast_pwrup_delay) (sb_t * sbh, osl_t * osh)182 { 183 uint16 delay = PMU_MAX_TRANSITION_DLY; 184 185 ASSERT (sbh->cccaps & CC_CAP_PMU); 186 187 switch (sbh->chip) 188 {188 uint16 189 BCMINITFN(sb_pmu_fast_pwrup_delay)(sb_t *sbh, osl_t *osh) 190 { 191 uint16 delay = PMU_MAX_TRANSITION_DLY; 192 193 ASSERT(sbh->cccaps & CC_CAP_PMU); 194 195 switch (sbh->chip) { 189 196 #if defined(BCM4328) 190 case BCM4328_CHIP_ID: 191 delay = 7000; 192 break; 193 #endif /* BCM4328 */ 194 197 case BCM4328_CHIP_ID: 198 delay = 7000; 199 break; 200 #endif 195 201 #if defined(BCM4325) 196 case BCM4325_CHIP_ID: 197 #ifdef BCMQT 198 delay = 70; 199 #else 200 delay = 2800; 201 #endif 202 break; 203 #endif /* BCM4325 || BCM4312 */ 202 case BCM4325_CHIP_ID: 203 delay = ISSIM_ENAB(sbh) ? 70 : 3000; 204 break; 205 #endif /* BCM4325 */ 204 206 #if defined(BCMPMU) 205 207 case BCM4312_CHIP_ID: … … 211 213 #endif /* BCMPMU */ 212 214 213 default:214 PMU_MSG(("No PMU fast power up delay specified "215 "for chip %x rev %d, using default %d us\n",216 sbh->chip, sbh->chiprev, delay));217 break;218 }219 220 return delay;215 default: 216 PMU_MSG(("No PMU fast power up delay specified " 217 "for chip %x rev %d, using default %d us\n", 218 sbh->chip, sbh->chiprev, delay)); 219 break; 220 } 221 222 return delay; 221 223 } 222 224 -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/include/bcmsrom.h
r8761 r11650 294 294 #define SROM8_W1_PAB2_HC (SROM8_SISO + SROM8_5GH_PA + 2) 295 295 296 #define SROM8_FEM2G 87 297 #define SROM8_FEM5G 88 298 #define SROM8_FEM_ANTSWLUT_MASK 0xf800 299 #define SROM8_FEM_ANTSWLUT_SHIFT 11 300 #define SROM8_FEM_TR_ISO_MASK 0x0700 301 #define SROM8_FEM_TR_ISO_SHIFT 8 302 #define SROM8_FEM_PDET_RANGE_MASK 0x00f8 303 #define SROM8_FEM_PDET_RANGE_SHIFT 3 304 #define SROM8_FEM_EXTPA_GAIN_MASK 0x0006 305 #define SROM8_FEM_EXTPA_GAIN_SHIFT 1 306 #define SROM8_FEM_TSSIPOS_MASK 0x0001 307 #define SROM8_FEM_TSSIPOS_SHIFT 0 308 309 310 296 311 #define SROM8_CRCREV 219 297 312 -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/include/pcicfg.h
r8761 r11650 466 466 #define PCI_BACKPLANE_ADDR 0xA0 /* address an arbitrary location on the system backplane */ 467 467 #define PCI_BACKPLANE_DATA 0xA4 /* data at the location specified by above address */ 468 #define PCI_CLK_CTL_ST 0xa8 /* pci config space clock control/status (>=rev14) */ 468 469 #define PCI_GPIO_IN 0xb0 /* pci config space gpio input (>=rev3) */ 469 470 #define PCI_GPIO_OUT 0xb4 /* pci config space gpio output (>=rev3) */ -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/include/sbconfig.h
r10444 r11650 246 246 #define SBTMCL_IM_MASK 0x3000000 /* interrupt mode */ 247 247 #define SBTMCL_IM_SHIFT 24 248 249 #define SBTML_SICF_SHIFT 16 /* Shift to locate the SI control flags in sbtml */ 250 #define SBTMH_SISF_SHIFT 16 /* Shift to locate the SI status flags in sbtmh */ 251 248 252 249 253 /* sbtmconfighigh */ -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/sbutils.c
r10444 r11650 105 105 static uint8 sb_find_pci_capability (sb_info_t * si, uint8 req_cap_id, 106 106 uchar * buf, uint32 * buflen); 107 staticint sb_pci_fixcfg (sb_info_t * si);107 int sb_pci_fixcfg (sb_info_t * si); 108 108 /* routines to access mdio slave device registers */ 109 109 static int sb_pcie_mdiowrite (sb_info_t * si, uint physmedia, uint readdr, … … 4292 4292 * The current core may be changed upon return. 4293 4293 */ 4294 staticint4294 int 4295 4295 sb_pci_fixcfg (sb_info_t * si) 4296 4296 { … … 4520 4520 return memsize; 4521 4521 } 4522 4523 4524 void 4525 sb_pcie_war_ovr_disable(sb_t *sih) 4526 { 4527 } 4528 4529 void 4530 sb_core_cflags_wo(sb_t *sih, uint32 mask, uint32 val) 4531 { 4532 sb_info_t *sii; 4533 sbconfig_t *sb; 4534 uint32 w; 4535 4536 sii = SB_INFO(sih); 4537 sb = REGS2SB(sii->curmap); 4538 4539 ASSERT((val & ~mask) == 0); 4540 4541 /* mask and set */ 4542 w = (R_SBREG(sii, &sb->sbtmstatelow) & ~(mask << SBTML_SICF_SHIFT)) | 4543 (val << SBTML_SICF_SHIFT); 4544 W_SBREG(sii, &sb->sbtmstatelow, w); 4545 } 4546 4547 /* set/clear core-specific control flags */ 4548 uint32 4549 sb_core_cflags(sb_t *sih, uint32 mask, uint32 val) 4550 { 4551 sb_info_t *sii; 4552 sbconfig_t *sb; 4553 uint32 w; 4554 4555 sii = SB_INFO(sih); 4556 sb = REGS2SB(sii->curmap); 4557 4558 ASSERT((val & ~mask) == 0); 4559 4560 /* mask and set */ 4561 if (mask || val) { 4562 w = (R_SBREG(sii, &sb->sbtmstatelow) & ~(mask << SBTML_SICF_SHIFT)) | 4563 (val << SBTML_SICF_SHIFT); 4564 W_SBREG(sii, &sb->sbtmstatelow, w); 4565 } 4566 4567 /* return the new value 4568 * for write operation, the following readback ensures the completion of write opration. 4569 */ 4570 return (R_SBREG(sii, &sb->sbtmstatelow) >> SBTML_SICF_SHIFT); 4571 } 4572 4573 /* set/clear core-specific status flags */ 4574 uint32 4575 sb_core_sflags(sb_t *sih, uint32 mask, uint32 val) 4576 { 4577 sb_info_t *sii; 4578 sbconfig_t *sb; 4579 uint32 w; 4580 4581 sii = SB_INFO(sih); 4582 sb = REGS2SB(sii->curmap); 4583 4584 ASSERT((val & ~mask) == 0); 4585 ASSERT((mask & ~SISF_CORE_BITS) == 0); 4586 4587 /* mask and set */ 4588 if (mask || val) { 4589 w = (R_SBREG(sii, &sb->sbtmstatehigh) & ~(mask << SBTMH_SISF_SHIFT)) | 4590 (val << SBTMH_SISF_SHIFT); 4591 W_SBREG(sii, &sb->sbtmstatehigh, w); 4592 } 4593 4594 /* return the new value */ 4595 return (R_SBREG(sii, &sb->sbtmstatehigh) >> SBTMH_SISF_SHIFT); 4596 } 4597 void 4598 sb_pmu_spuravoid(sb_t *sbh, osl_t *osh, bool spuravoid) 4599 { 4600 chipcregs_t *cc; 4601 uint origidx; 4602 uint32 tmp; 4603 4604 /* Remember original core before switch to chipc */ 4605 origidx = sb_coreidx(sbh); 4606 cc = sb_setcore(sbh, SB_CC, 0); 4607 ASSERT(cc); 4608 4609 W_REG(osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL0); 4610 W_REG(osh, &cc->pllcontrol_data, 0x11100070); 4611 W_REG(osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL1); 4612 W_REG(osh, &cc->pllcontrol_data, 0x1014140a); 4613 W_REG(osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL5); 4614 W_REG(osh, &cc->pllcontrol_data, 0x88888854); 4615 4616 if (spuravoid) { /* spur_avoid ON, enable 41/82/164Mhz clock mode */ 4617 W_REG(osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL2); 4618 W_REG(osh, &cc->pllcontrol_data, 0x05201828); 4619 } else { /* enable 40/80/160Mhz clock mode */ 4620 W_REG(osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL2); 4621 W_REG(osh, &cc->pllcontrol_data, 0x05001828); 4622 } 4623 4624 tmp = R_REG(osh, &cc->pmucontrol); 4625 W_REG(osh, &cc->pmucontrol, tmp | (1 << 10)); 4626 4627 /* Return to original core */ 4628 sb_setcoreidx(sbh, origidx); 4629 } 4630 4631 4632 void 4633 sb_4329_tweak(sb_t *sih, uint32 mask, uint32 val) 4634 { 4635 sb_info_t *sii; 4636 chipcregs_t *cc; 4637 uint origidx; 4638 uint32 temp; 4639 4640 sii = SB_INFO(sih); 4641 4642 origidx = sii->curidx; 4643 ASSERT(GOODIDX(origidx)); 4644 4645 cc = (chipcregs_t *)sb_setcore(sih, SB_CC, 0); 4646 4647 W_REG(sii->osh, &cc->chipcontrol_addr, 0); 4648 temp = R_REG(sii->osh, &cc->chipcontrol_data); 4649 temp = temp & ~mask; 4650 temp = temp | val; 4651 W_REG(sii->osh, &cc->chipcontrol_data, temp); 4652 4653 sb_setcoreidx(sih, origidx); 4654 } 4655 4656 void 4657 sb_4329_pmu_voltage(sb_t *sih) 4658 { 4659 sb_info_t *sii; 4660 chipcregs_t *cc; 4661 uint origidx; 4662 uint32 temp; 4663 /* Function For CHANGING CBUCK,CLDO,LNLDO1 Voltages To Same As BT */ 4664 sii = SB_INFO(sih); 4665 origidx = sii->curidx; 4666 ASSERT(GOODIDX(origidx)); 4667 cc = (chipcregs_t *)sb_setcore(sih, SB_CC, 0); 4668 4669 W_REG(sii->osh, &cc->regcontrol_addr, 3); 4670 temp = R_REG(sii->osh, &cc->regcontrol_data); 4671 temp = temp | 0x04200000; 4672 W_REG(sii->osh, &cc->regcontrol_data, temp); 4673 4674 W_REG(sii->osh, &cc->regcontrol_addr, 5); 4675 temp = R_REG(sii->osh, &cc->regcontrol_data); 4676 temp = temp | 0x0003fe00; 4677 W_REG(sii->osh, &cc->regcontrol_data, temp); 4678 sb_setcoreidx(sih, origidx); 4679 } 4680 4681 void 4682 sb_4329_vbatmeas_on(sb_t *sih, uint32 *save_reg0, uint32 *save_reg5) 4683 { 4684 sb_info_t *sii; 4685 chipcregs_t *cc; 4686 uint origidx; 4687 uint32 temp; 4688 4689 return; 4690 4691 sii = SB_INFO(sih); 4692 4693 origidx = sii->curidx; 4694 ASSERT(GOODIDX(origidx)); 4695 4696 cc = (chipcregs_t *)sb_setcore(sih, SB_CC, 0); 4697 4698 W_REG(sii->osh, &cc->regcontrol_addr, 0); 4699 temp = R_REG(sii->osh, &cc->regcontrol_data); 4700 *save_reg0 = temp; 4701 temp = temp | 0x00000001; 4702 W_REG(sii->osh, &cc->regcontrol_data, temp); 4703 4704 W_REG(sii->osh, &cc->regcontrol_addr, 5); 4705 temp = R_REG(sii->osh, &cc->regcontrol_data); 4706 *save_reg5 = temp; 4707 temp = temp | 0x80000000; 4708 W_REG(sii->osh, &cc->regcontrol_data, temp); 4709 4710 sb_setcoreidx(sih, origidx); 4711 } 4712 4713 void 4714 sb_4329_vbatmeas_off(sb_t *sih, uint32 save_reg0, uint32 save_reg5) 4715 { 4716 sb_info_t *sii; 4717 chipcregs_t *cc; 4718 uint origidx; 4719 4720 return; 4721 4722 sii = SB_INFO(sih); 4723 4724 origidx = sii->curidx; 4725 ASSERT(GOODIDX(origidx)); 4726 4727 cc = (chipcregs_t *)sb_setcore(sih, SB_CC, 0); 4728 4729 W_REG(sii->osh, &cc->regcontrol_addr, 0); 4730 W_REG(sii->osh, &cc->regcontrol_data, save_reg0); 4731 4732 W_REG(sii->osh, &cc->regcontrol_addr, 5); 4733 W_REG(sii->osh, &cc->regcontrol_data, save_reg5); 4734 4735 sb_setcoreidx(sih, origidx); 4736 } 4737 bool 4738 sb_ldo_war(sb_t *sih, uint devid) 4739 { 4740 sb_info_t *sii = SB_INFO(sih); 4741 uint32 w; 4742 chipcregs_t *cc; 4743 void *regs = sii->curmap; 4744 uint32 rev_id, ccst; 4745 4746 rev_id = OSL_PCI_READ_CONFIG(sii->osh, PCI_CFG_REV, sizeof(uint32)); 4747 rev_id &= 0xff; 4748 if (!(((devid == BCM4322_CHIP_ID) || 4749 (devid == BCM4322_D11N_ID) || 4750 (devid == BCM4322_D11N2G_ID) || 4751 (devid == BCM4322_D11N5G_ID)) && 4752 (rev_id == 0))) 4753 return TRUE; 4754 4755 4756 /* switch to chipcommon */ 4757 w = OSL_PCI_READ_CONFIG(sii->osh, PCI_BAR0_WIN, sizeof(uint32)); 4758 OSL_PCI_WRITE_CONFIG(sii->osh, PCI_BAR0_WIN, sizeof(uint32), SB_ENUM_BASE); 4759 cc = (chipcregs_t *)regs; 4760 4761 /* clear bit 7 to fix LDO 4762 * write to register *blindly* WITHOUT read since read may timeout 4763 * because the default clock is 32k ILP 4764 */ 4765 W_REG(sii->osh, &cc->regcontrol_addr, 0); 4766 /* AND_REG(sii->osh, &cc->regcontrol_data, ~0x80); */ 4767 W_REG(sii->osh, &cc->regcontrol_data, 0x3001); 4768 4769 OSL_DELAY(5000); 4770 4771 /* request ALP_AVAIL through PMU to move sb out of ILP */ 4772 W_REG(sii->osh, &cc->min_res_mask, 0x0d); 4773 4774 SPINWAIT(((ccst = OSL_PCI_READ_CONFIG(sii->osh, PCI_CLK_CTL_ST, 4)) & CCS_ALPAVAIL) 4775 == 0, PMU_MAX_TRANSITION_DLY); 4776 4777 if ((ccst & CCS_ALPAVAIL) == 0) { 4778 SB_ERROR(("ALP never came up clk_ctl_st: 0x%x\n", ccst)); 4779 return FALSE; 4780 } 4781 4782 OSL_PCI_WRITE_CONFIG(sii->osh, PCI_BAR0_WIN, sizeof(uint32), w); 4783 4784 return TRUE; 4785 } 4786 4787 bool 4788 BCMINITFN(sb_pci_war16165)(sb_t *sih) 4789 { 4790 sb_info_t *sii; 4791 4792 sii = SB_INFO(sih); 4793 4794 return (PCI(sii) && (sih->buscorerev <= 10)); 4795 } 4796 4797 uint32 sb_pcieserdesreg(sb_t *sih, uint32 mdioslave, uint32 offset, uint32 mask, uint32 val) 4798 { 4799 4800 } 4801 4802 #define PCI_FORCEHT(si) \ 4803 (((PCIE(si)) && (si->sb.chip == BCM4311_CHIP_ID) && ((si->sb.chiprev <= 1))) || \ 4804 ((PCI(si) || PCIE(si)) && (si->sb.chip == BCM4321_CHIP_ID)) || \ 4805 (PCIE(si))) 4806 4807 bool sb_clkctl_cc(sb_t *sih, uint mode) 4808 { 4809 sb_info_t *sii; 4810 4811 sii = SB_INFO(sih); 4812 4813 /* chipcommon cores prior to rev6 don't support dynamic clock control */ 4814 if (sih->ccrev < 6) 4815 return FALSE; 4816 4817 if (PCI_FORCEHT(sii)) 4818 return (mode == CLK_FAST); 4819 4820 return sb_clkctl_clk(sii, mode); 4821 } -
src/linux/brcm/linux.v24_2/arch/mips/bcm947xx/setup.c
r9891 r11650 214 214 if (boardtype==NULL || strcmp(boardtype,"0x478"))iswrt350n=0; 215 215 if (boothwmodel==NULL || strcmp(boothwmodel,"WRT300N"))iswrt300n11=0; 216 if (boothwmodel==NULL || strcmp(boothwmodel,"WRT610N")) 217 { 218 iswrt300n11=0; 219 iswrt350n=0; 220 } 216 221 if (boothwver==NULL || strcmp(boothwver,"1.1"))iswrt300n11=0; 217 222 if (iswrt300n11)
Note: See TracChangeset
for help on using the changeset viewer.
