summaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/files/arch/rlx/bsp/dev_usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/realtek/files/arch/rlx/bsp/dev_usb.c')
-rw-r--r--target/linux/realtek/files/arch/rlx/bsp/dev_usb.c317
1 files changed, 0 insertions, 317 deletions
diff --git a/target/linux/realtek/files/arch/rlx/bsp/dev_usb.c b/target/linux/realtek/files/arch/rlx/bsp/dev_usb.c
deleted file mode 100644
index 10aa2e4d3..000000000
--- a/target/linux/realtek/files/arch/rlx/bsp/dev_usb.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Realte rtl819x USB host device support
- *
- * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
- * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
- *
- * Parts of this file are based on Atheros' 2.6.15 BSP
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- */
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/dma-mapping.h>
-#include <linux/platform_device.h>
-
-#include "bspchip.h"
-#include "dev_usb.h"
-
-/*
- * OHCI (USB full speed host controller)
- */
-static struct resource rtl819x_ohci_resources[] = {
- [0] = {
- .start = PADDR(OHCI_RTL819x_USB_BASE),
- .end = PADDR(OHCI_RTL819x_USB_BASE) + OHCI_RTL819x_USB_REG_SIZE - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = RTL819x_USB_IRQ,
- .end = RTL819x_USB_IRQ,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static u64 rtl819x_ohci_dmamask = RTL819x_DMA_MASK;
-static struct platform_device rtl819x_ohci_device = {
- .name = "rtl819x-ohci",
- .id = -1,
- .resource = rtl819x_ohci_resources,
- .num_resources = ARRAY_SIZE(rtl819x_ohci_resources),
- .dev = {
- .dma_mask = &rtl819x_ohci_dmamask,
- .coherent_dma_mask = RTL819x_DMA_MASK,
- },
-};
-
-/*
- * EHCI (USB high/full speed host controller)
- */
-static struct resource rtl819x_ehci_resources[] = {
- [0] = {
- .start = PADDR(EHCI_RTL819x_USB_BASE),
- .end = PADDR(EHCI_RTL819x_USB_BASE) + EHCI_RTL819x_USB_REG_SIZE - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = RTL819x_USB_IRQ,
- .end = RTL819x_USB_IRQ,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static u64 rtl819x_ehci_dmamask = RTL819x_DMA_MASK;
-
-struct rtl819x_ehci_platform_data {
- u8 is_rtl819x;
-};
-
-static struct rtl819x_ehci_platform_data rtl819x_ehci_data;
-
-static struct platform_device rtl819x_ehci_device = {
- .name = "rtl819x-ehci",
- .id = -1,
- .resource = rtl819x_ehci_resources,
- .num_resources = ARRAY_SIZE(rtl819x_ehci_resources),
- .dev = {
- .dma_mask = &rtl819x_ehci_dmamask,
- .coherent_dma_mask = RTL819x_DMA_MASK,
- .platform_data = &rtl819x_ehci_data,
- },
-};
-
-void SetUSBPhy(unsigned char reg, unsigned char val)
-{
-
- #define USB2_PHY_DELAY {mdelay(5);}
-
- //8196C demo board: 0xE0:99, 0xE1:A8, 0xE2:98, 0xE3:C1, 0xE5:91,
-
-#if !CONFIG_RTL_819XD //8198
- REG32(0xb8000034) = (0x1f00 | val); USB2_PHY_DELAY;
-#else //8196D
- #define SYS_USB_SIE 0xb8000034
- #define SYS_USB_PHY 0xb8000090
- int oneportsel=(REG32(SYS_USB_SIE) & (1<<18))>>18;
-
- unsigned int tmp = REG32(SYS_USB_PHY); //8672 only
- tmp = tmp & ~((0xff<<11)|(0xff<<0));
-
-
- if(oneportsel==0)
- { REG32(SYS_USB_PHY) = (val << 0) | tmp; //phy 0
- }
- else
- { REG32(SYS_USB_PHY) = (val << 11) | tmp; //phy1
- }
-
- USB2_PHY_DELAY;
-#endif
- //printk("0xb8000034=%08x\n", REG32(0xb8000034));
-
- unsigned char reg_h=(reg &0xf0)>>4;
- unsigned char reg_l=(reg &0x0f);
-
- mdelay(100);
- REG32(0xb80210A4) = (0x00300000 | (reg_l<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00200000 | (reg_l<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00300000 | (reg_l<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00300000 | (reg_h<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00200000 | (reg_h<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00300000 | (reg_h<<16)); USB2_PHY_DELAY;
-}
-
-unsigned char GetUSBPhy(unsigned char reg)
-{
- #define USB2_PHY_DELAY {mdelay(5);}
-
- unsigned char reg_h=((reg &0xf0)>>4)-2;
- unsigned char reg_l=(reg &0x0f);
-
- REG32(0xb80210A4) = (0x00300000 | (reg_l<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00200000 | (reg_l<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00300000 | (reg_l<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00300000 | (reg_h<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00200000 | (reg_h<<16)); USB2_PHY_DELAY;
- REG32(0xb80210A4) = (0x00300000 | (reg_h<<16)); USB2_PHY_DELAY;
-
- unsigned char val;
- val=REG32(0xb80210A4)>>24;
- //printk("reg=%x val=%x\n",reg, val);
- return val;
-}
-
-static void synopsys_usb_patch(void)
-{
-
-#define USB2_PHY_DELAY {int i=100; while(i>0) {i--;}}
- /* Patch: for USB 2.0 PHY */
-#if !defined(CONFIG_RTL_8196C)
- /* For Port-0 */
- REG32(0xb8003314) = 0x0000000E; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00340000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00240000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00340000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x003E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x002E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x003E0000; USB2_PHY_DELAY;
- REG32(0xb8003314) = 0x000000D8; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00360000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00260000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00360000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x003E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x002E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x003E0000; USB2_PHY_DELAY;
-
- /* For Port-1 */
- REG32(0xb8003314) = 0x000E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00540000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00440000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00540000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x005E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x004E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x005E0000; USB2_PHY_DELAY;
- REG32(0xb8003314) = 0x00D80000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00560000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00460000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x00560000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x005E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x004E0000; USB2_PHY_DELAY;
- REG32(0xb80210A4) = 0x005E0000; USB2_PHY_DELAY;
-
- printk("USB 2.0 Phy Patch(D): &0xb80210A4 = %08x\n", REG32(0xb80210A4)); /* A85E0000 */
-
-#elif defined(CONFIG_RTL_8196C)
-
- //disable Host chirp J-K
- SetUSBPhy(0xf4,0xe3); GetUSBPhy(0xf4);
- //8196C demo board: 0xE0:99, 0xE1:A8, 0xE2:98, 0xE3:C1, 0xE5:91,
- SetUSBPhy(0xe0,0x99); if(GetUSBPhy(0xe0)!=0x99) printk("reg 0xe0 not correct\n");
- SetUSBPhy(0xe1,0xa8); if(GetUSBPhy(0xe1)!=0xa8) printk("reg 0xe1 not correct\n");
- SetUSBPhy(0xe2,0x98); if(GetUSBPhy(0xe2)!=0x98) printk("reg 0xe2 not correct\n");
- SetUSBPhy(0xe3,0xc1); if(GetUSBPhy(0xe3)!=0xc1) printk("reg 0xe3 not correct\n");
- SetUSBPhy(0xe5,0x91); if(GetUSBPhy(0xe5)!=0x91) printk("reg 0xe5 not correct\n");
-
- //test packet.
- /*
- REG32(0xb8021054)=0x85100000;
- REG32(0xb8021010)=0x08000100;
- REG32(0xb8021054)=0x85180400;
- */
- printk("USB 2.0 PHY Patch Done.\n");
-
-#else
- printk("========================== NO PATCH USB 2.0 PHY =====================\n");
-#endif
- return;
-}
-//--------------------------------------------
-void EnableUSBPHY(int portnum)
-{
- if(portnum==0)
- {
- //phy0
- REG32(0xb8000090) |= (1<<8); //USBPHY_EN=1
- REG32(0xb8000090) |= (1<<9); //usbphy_reset=1, active high
- REG32(0xb8000090) &= ~(1<<9); //usbphy_reset=0, active high
- REG32(0xb8000090) |= (1<<10); //active_usbphyt=1
- }
- else
- {
- //phy1
- REG32(0xb8000090) |= (1<<19); //USBPHY_EN=1
- REG32(0xb8000090) |= (1<<20); //usbphy_reset=1, active high
- REG32(0xb8000090) &= ~(1<<20); //usbphy_reset=0, active high
- REG32(0xb8000090) |= (1<<21); //active_usbphyt=1
- }
-}
-
-static void __init rtl819x_usb_setup(void)
-{
-
-#if !defined(CONFIG_RTL_819XD) //8198
- REG32(0xb8000010)=REG32(0xb8000010)|(1<<17);
-#else //8196D
-
- //one port sel
- //is 0: phy#1 connect OTG mac, EHCI is in phy0
- //is 1: phy#1 connect EHCI mac
-
-#ifdef CONFIG_RTL_USB_OTG
- int oneportsel=0;
- REG32(0xb8000034) &= ~(1<<18); //one port sel=0
-#else
-#if 1 //software force
- int oneportsel=1;
- if(oneportsel==1)
- { REG32(0xb8000034) |= (1<<18); //one port sel=1
- }
- else
- { REG32(0xb8000034) &= ~(1<<18); //one port sel=0
- }
-#else //read-back decide
- int oneportsel= (REG32(0xb8000034) & (1<<18))>>18;
- printk("EHCI: one_port_host_sel=%d, EHCI in Port %s\n", oneportsel, (oneportsel==0) ? "0": "1");
-#endif
-#endif
- //sie
- REG32(0xb8000034) |= (1<<11); //s_utmi_suspend0=1
- REG32(0xb8000034) |= (1<<12); //en_usbhost=1
- REG32(0xb8000034) |= (1<<17); //enable pgbndry_disable=1
-
- if(oneportsel==1)
- {
- EnableUSBPHY(1);
- }
- else
- {
- //phy0, phy1
-#ifdef CONFIG_RTL_OTGCTRL
- extern unsigned int TurnOn_OTGCtrl_Interrupt(unsigned int);
- unsigned int old= TurnOn_OTGCtrl_Interrupt(0);
-#endif
- EnableUSBPHY(0);
- EnableUSBPHY(1);
-#ifdef CONFIG_RTL_OTGCTRL
- TurnOn_OTGCtrl_Interrupt(old);
-#endif
- }
-
- //ip clock mgr
- REG32(0xb8000010) |= (1<<12)|(1<<13)|(1<<19)|(1<<20); //enable lx1, lx2
- REG32(0xb8000010) |= (1<<21); //enable host ip
-
- mdelay(100);
- //printk("b8021000=%x\n", REG32(0xb8021000) );
- //printk("b8021054=%x\n", REG32(0xb8021054) );
-#endif
-
- /*register platform device*/
- platform_device_register(&rtl819x_ehci_device);
- platform_device_register(&rtl819x_ohci_device);
-
-#if defined(CONFIG_RTL_8196C)
- synopsys_usb_patch();
-#endif
-
-
-#if 1 //wei add
- //dump
- int i;
- for(i=0xe0;i<=0xe7; i++)
- printk("reg %x=%x\n", i,GetUSBPhy(i) );
- for(i=0xf0;i<=0xf6; i++)
- printk("reg %x=%x\n", i,GetUSBPhy(i) );
-#endif
-
- return 0;
-}
-
-void __init rtl819x_add_device_usb(void)
-{
- rtl819x_usb_setup();
-}
-