/*****************************************************************************
 Prototype       : HI_MPI_ISP_SetRegister
 Description     : set isp register, include extent memory.
 Input           : u32Addr   **
                   u32Value  **
 Output          : None
 Return Value    :
 Process         :
 Note             :

  History
  1.Date         : 2011/1/13
    Author       : x00100808
    Modification : Created function

*****************************************************************************/
HI_S32 HI_MPI_ISP_SetRegister(ISP_DEV IspDev, HI_U32 u32Addr, HI_U32 u32Value)
{
    ISP_CHECK_DEV(IspDev);
    IO_WRITE32(u32Addr, u32Value);

    return HI_SUCCESS;
}
Exemple #2
0
static void phy_auto_negotiation_set(struct am_net_private *np)
{
	unsigned int rint;
	int s100,full,tmp;
	switch(np->phy_Identifier)
	{
	case PHY_ATHEROS_8032:
		rint=mdio_read(np->dev,np->phys[0],0x11);
		s100=rint&(1<<14);
		full=((rint)&(1<<13));
		break;
	case PHY_SMSC_8700:	
	case PHY_SMSC_8720:
	default:
		rint=mdio_read(np->dev,np->phys[0],31);
		s100=rint&(1<<3);
		full=((rint>>4)&1);
		break;
	}
	if(full)
	{
		if (debug > 0)
					printk("duplex\n");
		//(*ETH_MAC_0_Configuration) |= 1<<11; // program mac
		tmp =
		IO_READ32(np->base_addr +ETH_MAC_0_Configuration);
		tmp |= 1 << 11;
		IO_WRITE32(tmp,np->base_addr +ETH_MAC_0_Configuration);
	}
	else
	{
		if (debug > 0)
					printk("half duplex\n");
		//(*ETH_MAC_0_Configuration) &= ~(1<<11) ; // program mac
		tmp =
		IO_READ32(np->base_addr +ETH_MAC_0_Configuration);
		tmp &= ~(1 << 11);
		IO_WRITE32(tmp, np->base_addr +ETH_MAC_0_Configuration);
	}
	mac_PLL_changed(np,s100?100:10);
	return;
}
Exemple #3
0
static void mdio_write(struct net_device *dev, int phyid, int reg, int val)
{

#define WR (1<<1)
#define MDCCLK (0x1) << 2	//our 130 MHz
#define BUSY 0x1

		struct am_net_private *priv = netdev_priv(dev);
		unsigned long busy = 0;
		unsigned long reg4;
		reg4 = phyid << 11 | reg << 6 | MDCCLK | WR | BUSY;
		IO_WRITE32(val, priv->base_addr + ETH_MAC_5_GMII_Data);
		do {			//waiting the phy is ready to write ...
			busy = IO_READ32(priv->base_addr + ETH_MAC_4_GMII_Addr);
		} while (busy & 0x1);
		IO_WRITE32(reg4, priv->base_addr + ETH_MAC_4_GMII_Addr);
		do {			//waiting the phy is ready to write ...
			busy = IO_READ32(priv->base_addr + ETH_MAC_4_GMII_Addr);
		} while (busy & 0x1);
}
Exemple #4
0
void close_8193_NFI(void)
{
	/*
	1.	Power off digital:
		RG_NFI_PWR_CTRL[2] = 1       // disable clock
		RG_NFI_PWR_CTRL[0] = 1       // en iso   
		RG_NFI_PWR_RST_B[0] = 0     // en reset    
		RG_NFI_PWR_CTRL[1] = 0       // turn off power

	2.	Power off analog
	      ADDR:0x134C BIT[1] =0
	      ADDR:0x1354  BIT[20] =0
	*/
	u32 value = 0;
	printf("Close 8193 NFI Digital\n");

	//power off digital
	value = IO_READ32(0,RG_NFI_PWR_CTRL);
	IO_WRITE32(0,RG_NFI_PWR_CTRL,(value | 0x4));
	//IO_WRITE32(0,RG_NFI_PWR_CTRL,(value | 0x5));
	value = IO_READ32(0,RG_NFI_PWR_CTRL);
	IO_WRITE32(0,RG_NFI_PWR_CTRL,(value | 0x1));
	value = IO_READ32(0,RG_NFI_PWR_RST_B);
	IO_WRITE32(0,RG_NFI_PWR_RST_B,(value & 0xFFFFFFFE));
	value = IO_READ32(0,RG_NFI_PWR_CTRL);
	IO_WRITE32(0,RG_NFI_PWR_CTRL,(value & 0xFFFFFFFD));

	printf("Close 8193 NFI Analog\n");
	//power off analog
	value = IO_READ32(0,0x134C);
	IO_WRITE32(0,0x134C,(value & 0xFFFFFFFD));

	//can not close power share power
	//value = IO_READ32(0,0x1354);
	//IO_WRITE32(0,0x1354,(value & 0xFFEFFFFF));
	
	printf("Close 8193 NFI OK\n");
}
Exemple #5
0
static int mac_PLL_changed(struct am_net_private *np,int clk_mhz)
{
	unsigned long tmp;
	switch(clk_mhz)
		{
		case 0://disable clock
				PERIPHS_CLEAR_BITS(PREG_ETHERNET_ADDR0, 1);	//disable clk                                
				PERIPHS_CLEAR_BITS(PREG_ETHERNET_ADDR0, (1 << 0 | 1 << 2 | 1 << 3));
				break;
		case 10:
			if (debug > 0)
							printk("10m\n");
				//(*ETH_MAC_0_Configuration) &= ~(1<<14); // program mac
				tmp =
				IO_READ32(np->base_addr +ETH_MAC_0_Configuration);
				tmp &= ~(1 << 14);
				IO_WRITE32(tmp,np->base_addr +ETH_MAC_0_Configuration);
				PERIPHS_CLEAR_BITS(PREG_ETHERNET_ADDR0, 1);
				PERIPHS_CLEAR_BITS(PREG_ETHERNET_ADDR0, (1 << 1));
				PERIPHS_SET_BITS(PREG_ETHERNET_ADDR0, 1);
				break;
		case 100:
		default:
			if (debug > 0)
						printk("100m\n");
				//(*ETH_MAC_0_Configuration) |= 1<<14; // program mac
				tmp =
				IO_READ32(np->base_addr +ETH_MAC_0_Configuration);
				tmp |= 1 << 14;
				IO_WRITE32(tmp,np->base_addr +ETH_MAC_0_Configuration);
				PERIPHS_CLEAR_BITS(PREG_ETHERNET_ADDR0, 1);
				PERIPHS_SET_BITS(PREG_ETHERNET_ADDR0, (1 << 1));
				PERIPHS_SET_BITS(PREG_ETHERNET_ADDR0, 1);
		}
	udelay(10);
	return 0;
}
Exemple #6
0
int mt8193_vopll_en()
{
    printf("mt8193_pllgp_en() enter\n");

    /* PLL2 setup of 75MHZ. AD_PLLGP_CLK=450MHZ*/

    IO_WRITE32(0, 0x44c, 0x1);

    // CKGEN_WRITE32(REG_RW_PLL_GPANACFG0, 0xAD300982);

    CKGEN_WRITE32(REG_RW_LVDS_ANACFG2, 0x32215000);

    CKGEN_WRITE32(REG_RW_LVDS_ANACFG3, 0x410c0);

    CKGEN_WRITE32(REG_RW_LVDS_ANACFG4, 0x300);

    printf("mt8193_pllgp_en() exit\n");

    return 0;
}
Exemple #7
0
static int mdio_read(struct net_device *dev, int phyid, int reg)
{
#define WR (1<<1)
#define MDCCLK (0x1) << 2	//our 130 MHz
#define BUSY 0x1

		struct am_net_private *priv = netdev_priv(dev);
		unsigned long busy = 0;
		unsigned long reg4;
		unsigned long val = 0;
		reg4 = phyid << 11 | reg << 6 | MDCCLK | BUSY;
		/*      
		do{ //waiting the phy is ready to write ...
		busy=IO_READ32(priv->base_addr+ETH_MAC_4_GMII_Addr);
		}while(busy&0x1);
		*/
		IO_WRITE32(reg4, priv->base_addr + ETH_MAC_4_GMII_Addr);
		do {			//waiting the phy is ready to write ...
			busy = IO_READ32(priv->base_addr + ETH_MAC_4_GMII_Addr);
		} while (busy & 0x1);
		val = IO_READ32(priv->base_addr + ETH_MAC_5_GMII_Data) & 0xffff;
		return val;
}
Exemple #8
0
static inline int update_status(struct net_device *dev, unsigned long status,
				unsigned long mask)
{
	struct am_net_private *np = netdev_priv(dev);
	int need_reset = 0;
	int need_rx_restart = 0;
	int res = 0;
	if (status & NOR_INTR_EN)	//Normal Interrupts Process
	{
		if (status & TX_INTR_EN)	//Transmit Interrupt Process
		{
			IO_WRITE32((1 << 0 | 1 << 16),np->base_addr + ETH_DMA_5_Status);
			res |= 1;
		}
		if (status & RX_INTR_EN)	//Receive Interrupt Process
		{
			IO_WRITE32((1 << 6 | 1 << 16),np->base_addr + ETH_DMA_5_Status);
			res |= 2;
		}
		if (status & EARLY_RX_INTR_EN) {
			IO_WRITE32((EARLY_RX_INTR_EN | NOR_INTR_EN),np->base_addr + ETH_DMA_5_Status);
		}
		if (status & TX_BUF_UN_EN) {
			IO_WRITE32((1 << 2 | 1 << 16),np->base_addr + ETH_DMA_5_Status);
			res |= 1;
			//this error will cleard in start tx...
			if (debug > 1)
				printk(KERN_WARNING "[" DRV_NAME "]" "Tx bufer unenable\n");
		}
	} else if (status & ANOR_INTR_EN)	//Abnormal Interrupts Process
	{
		if (status & RX_BUF_UN) {
			IO_WRITE32((RX_BUF_UN | ANOR_INTR_EN),np->base_addr + ETH_DMA_5_Status);
			np->stats.rx_over_errors++;
			need_rx_restart++;
			res |= 2;
			//printk(KERN_WARNING DRV_NAME "Receive Buffer Unavailable\n");
			if (debug > 1)
				printk(KERN_WARNING "[" DRV_NAME "]" "Rx bufer unenable\n");
		}
		if (status & RX_STOP_EN) {
			IO_WRITE32((RX_STOP_EN | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			need_rx_restart++;
			res |= 2;
		}
		if (status & RX_WATCH_TIMEOUT) {
			IO_WRITE32((RX_WATCH_TIMEOUT | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			need_rx_restart++;
		}
		if (status & FATAL_BUS_ERROR) {
			IO_WRITE32((FATAL_BUS_ERROR | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			need_reset++;
 			printk(KERN_WARNING "[" DRV_NAME "]" "fatal bus error\n");
		}
		if (status & EARLY_TX_INTR_EN) {
			IO_WRITE32((EARLY_TX_INTR_EN | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
		}
		if (status & TX_STOP_EN) {
			IO_WRITE32((TX_STOP_EN | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			res |= 1;
		}
		if (status & TX_JABBER_TIMEOUT) {
			IO_WRITE32((TX_JABBER_TIMEOUT | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			printk(KERN_WARNING "[" DRV_NAME "]" "tx jabber timeout\n");
			np->first_tx = 1;
		}
		if (status & RX_FIFO_OVER) {
			IO_WRITE32((RX_FIFO_OVER | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			np->stats.rx_fifo_errors++;
			need_rx_restart++;
			res |= 2;
			printk(KERN_WARNING "[" DRV_NAME "]" "Rx fifo over\n");
		}
		if (status & TX_UNDERFLOW) {
			IO_WRITE32((TX_UNDERFLOW | ANOR_INTR_EN),
				   np->base_addr + ETH_DMA_5_Status);
			printk(KERN_WARNING "[" DRV_NAME "]" "Tx underflow\n");
			np->first_tx = 1;
			res |= 1;
		}
	}

	if (need_reset) {
		printk(KERN_WARNING DRV_NAME "system reset\n");
		free_ringdesc(dev);
		ethernet_reset(dev);
	} else if (need_rx_restart) {
		IO_WRITE32(1, np->base_addr + ETH_DMA_2_Re_Poll_Demand);
	}
	return res;
}
u32 mt8193_io_agent_test(void)
{
    u32 u4Tmp = 0;

    printk("[CKGEN] IO AGENT TEST ------------------------------------------ \n");
    
    IO_WRITE32(0x1000, 0x500, 0x55555555);
    u4Tmp = IO_READ32(0x1000, 0x500);
    if (u4Tmp == 0x55555555)
    {
        printk("[CKGEN] TEST PASS at 0x1500\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x1500. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }
    

    IO_WRITE32(0x0, 0x18, 0x55555555);
    u4Tmp = IO_READ32(0x0, 0x18);
    if (u4Tmp == 0x55555555)
    {
        printk("[CKGEN] TEST PASS at 0x18\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x18. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }

    IO_WRITE32(0x0, 0x0408, 0x55555555);
    u4Tmp = IO_READ32(0x0, 0x408);
    if (u4Tmp == 0x55555555)
    {
        printk("[CKGEN] TEST PASS at 0x408\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x408. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }
    
    IO_WRITE32(0x0, 0x0608, 0x55555555);
    u4Tmp = IO_READ32(0x0, 0x608);
    if (u4Tmp == 0x55555555)
    {
        printk("[CKGEN] TEST PASS at 0x608\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x608. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }
    
    IO_WRITE32(0x0, 0x0a10, 0x55555555);
    u4Tmp = IO_READ32(0x0, 0xa10);
    if (u4Tmp == 0x00055555)
    {
        printk("[CKGEN] TEST PASS at 0xa10\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0xa10. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }

    
    IO_WRITE32(0x1000, 0x200, 0xaaaaffff);
    u4Tmp = IO_READ32(0x1000, 0x200);
    if (u4Tmp == 0xaaaaffff)
    {
        printk("[CKGEN] TEST PASS at 0x1200\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x1200. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }
    
    IO_WRITE32(0x1000, 0x608, 0x05550555);
    u4Tmp = IO_READ32(0x1000, 0x608);
    if (u4Tmp == 0x05550555)
    {
        printk("[CKGEN] TEST PASS at 0x1608\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x1608. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }
    
    IO_WRITE32(0x1000, 0x708, 0x55555555);
    u4Tmp = IO_READ32(0x1000, 0x708);
    if (u4Tmp == 0x55555555)
    {
        printk("[CKGEN] TEST PASS at 0x1708\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x1708. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }
    
    IO_WRITE32(0x1000, 0xd00, 0x55555555);
    u4Tmp = IO_READ32(0x1000, 0xd00);
    if (u4Tmp == 0x55555555)
    {
        printk("[CKGEN] TEST PASS at 0x1d00\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x1d00. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }

    IO_WRITE32(0x1000, 0xd00, 0xaaaaaaaa);
    u4Tmp = IO_READ32(0x1000, 0xd00);
    if (u4Tmp == 0xaaaaaaaa)
    {
        printk("[CKGEN] TEST PASS at 0x1d00\n");
    }
    else
    {
        printk("[CKGEN] TEST FAIL at 0x1d00. [0x%x] !!!!!!!!!!\n", u4Tmp);
    }

    printk("[CKGEN] IO AGENT TEST FINISH ------------------------------------------ \n");

    return 0;
    
}