コード例 #1
0
ファイル: sm502.c プロジェクト: BarclayII/pmon-3amatx
void set_current_gate(void)
{
                unsigned long value, gate;

                //change to mode0

                value = regRead32(POWER_MODE_CTRL);
                value = FIELD_SET(value, POWER_MODE_CTRL, MODE, MODE0);
                regWrite32(POWER_MODE_CTRL, value);

                // Don't forget to set up power mode0 gate properly.
                gate = regRead32(CURRENT_POWER_GATE);
                gate = FIELD_SET(gate, CURRENT_POWER_GATE, 2D,  ENABLE);
                regWrite32(POWER_MODE0_GATE, gate);
	
}
コード例 #2
0
ファイル: sm502.c プロジェクト: BarclayII/pmon-3amatx
// Program new power mode.
void setPower(unsigned long nGates, unsigned long Clock)
{
        unsigned long gate_reg, clock_reg;
        unsigned long control_value;

        // Get current power mode.
        control_value = FIELD_GET(regRead32(POWER_MODE_CTRL),
                                                          POWER_MODE_CTRL,
                                                          MODE);

        switch (control_value)
        {
        case POWER_MODE_CTRL_MODE_MODE0:

                // Switch from mode 0 to mode 1.
                gate_reg = POWER_MODE1_GATE;
                clock_reg = POWER_MODE1_CLOCK;
                control_value = FIELD_SET(control_value,
                                          POWER_MODE_CTRL, MODE, MODE1);
                break;

        case POWER_MODE_CTRL_MODE_MODE1:
        case POWER_MODE_CTRL_MODE_SLEEP:

                // Switch from mode 1 or sleep to mode 0.
                gate_reg = POWER_MODE0_GATE;
                clock_reg = POWER_MODE0_CLOCK;
                control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE0);
                break;

        default:
                // Invalid mode
                return;
        }

        // Program new power mode.
        regWrite32(gate_reg, nGates);
        regWrite32(clock_reg, Clock);
        regWrite32(POWER_MODE_CTRL, control_value);

        // When returning from sleep, wait until finished.
        while (FIELD_GET(regRead32(POWER_MODE_CTRL),
                                         POWER_MODE_CTRL,
                                         SLEEP_STATUS) == POWER_MODE_CTRL_SLEEP_STATUS_ACTIVE) ;
}
コード例 #3
0
static void tc3162_pcie_fixup_ra63165(struct pci_dev *dev)
{
	uint32 tmp;
#if defined(CONFIG_TCSUPPORT_BONDING)
	int i;
#endif

	/* setup COMMAND register */
	pci_write_config_word(dev, PCI_COMMAND,
		(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER));

#if defined(CONFIG_TCSUPPORT_BONDING)
	//Enable slave RC ECRC count . //bus1, dev1
	regWrite32(0xbfb80020, 0x1080118);
	tmp = regRead32(0xbfb80024);
	regWrite32(0xbfb80024, (tmp | (1<<8)));

	//config PCIe RC/EP VC mapping
	//set bus0, dev0, fun0, reg154 (setup VC0)
	regWrite32(0xbfb80020, 0x154);
	regWrite32(0xbfb80024, 0X80000001);
	//set bus0, dev0, fun0, reg160 (setup VC1)
	regWrite32(0xbfb80020, 0x160);
	regWrite32(0xbfb80024, 0X81000002);
	//set bus1, dev0, fun0, reg154 (setup VC0)
	regWrite32(0xbfb80020, 0x1000154);
	regWrite32(0xbfb80024, 0X80000001);
	//set bus1, dev0, fun0, reg160 (setup VC1)
	regWrite32(0xbfb80020, 0x1000160);
	regWrite32(0xbfb80024, 0X81000002);

	//config slave chip EP MSI
	regWrite32(0xbfb80020, 0x1000050);
	tmp = regRead32(0xbfb80024);
	regWrite32(0xbfb80020, 0x1000050);
	regWrite32(0xbfb80024, (tmp | 0x510000));
	regWrite32(0xbfb80020, 0x1000054);
	regWrite32(0xbfb80024, 0x20af1000);
	regWrite32(0xbfb80020, 0x100005c);
	regWrite32(0xbfb80024, 0x0);

	//setup RC0 MSI address reg
	regWrite32(0xbfb82090, 0x20af1000);

	//setup RC0 Pbus/Rbus VC mapping
	regWrite32(0xbfb82094, 0x1);
	regWrite32(0xbfb83094, 0x0);

	//wait RC0 VC1 set up OK
	for(i=0 ; i<1000 ; i++){
		mdelay(1);
		regWrite32(0xbfb80020, 0x164);
		if((regRead32(0xbfb80024) & (1<<17)) == 0){
			break;
		}
	}
#endif

	//pci-e interrupt enable_dma
	if(isRT63365 || isMT751020){
#if defined(CONFIG_TCSUPPORT_BONDING)
		if((regRead32(0xbfb82050) & 0x1) != 0){
			/* slave dmt */
			tmp = regRead32(0xbfb8000c);
			regWrite32(0xbfb8000c, (tmp | (1<<23)));
			/* slave gdma */
			tmp = regRead32(0xbfb8000c);
			regWrite32(0xbfb8000c, (tmp | (1<<25)));

			if(regRead32(0xbfb80050) == 1){
				/* wifi 0 (slave)*/
				tmp = regRead32(0xbfb8000c);
				regWrite32(0xbfb8000c, (tmp | (1<<22)));
			}
		}
#else
		if((regRead32(0xbfb82050) & 0x1) != 0){
			tmp = regRead32(0xbfb8000c);
			regWrite32(0xbfb8000c, (tmp | (1<<20)));
		}
#endif
		//second band
		if(dual_band_support){
			if((regRead32(0xbfb83050) & 0x1) != 0){
				if(isMT751020){
					tmp = regRead32(0xbfb8000c);
					regWrite32(0xbfb8000c, (tmp | (1<<26)));
				}else{
					tmp = regRead32(0xbfb8000c);
					regWrite32(0xbfb8000c, (tmp | (1<<21)));
				}
			}
		}
	}else{
		tmp = regRead32(0xbfb8100c);
		regWrite32(0xbfb8100c, (tmp | (1<<20)));
	}

	if(isMT751020){
		pcie_timeout_disable();
		aer_config(1);
	}
}