📄 1000.tango2.patch
字号:
+ m->kernel_end = kend;+ gen_memcfg_checksum(m);+// emprintk("ebase @%08lx. found memcfg @%08lx.\n", read_c0_ebase(), MEM_BASE_dram_controller_0+FM_MEMCFG);+ }++#ifdef CONFIG_QUICKTURN+ // emhack: removing 16MB here!+ add_memory_region(MEM_BASE_dram_controller_0+16*1024*1024, TANGO2_SYSTEMRAM_ACTUALSIZE, BOOT_MEM_RAM);+#else+ offset = KSEG1ADDR(em8xxx_kmem_start) - KSEG1ADDR(MEM_BASE_dram_controller_0);+ /* Mark the address from 0 to the start of kernel reserved */+ add_memory_region(0, MEM_BASE_dram_controller_0+offset, BOOT_MEM_RESERVED);+ add_memory_region(MEM_BASE_dram_controller_0+offset, em8xxx_kmem_size, BOOT_MEM_RAM);+ +// emprintk("Adding memory region from 0x%08lx, size 0x%08lx\n", MEM_BASE_dram_controller_0+offset, em8xxx_kmem_size);+#endif++// emprintk("status=%p ebase=%p watchlo=%p watchhi=%p\n",read_c0_status(),read_c0_ebase(),read_c0_watchlo0(),read_c0_watchhi0());++#ifdef CONFIG_TANGO2_SMP863X+ /* Calculating CPU/System frequencies */+ em8xxx_cpu_frequency = tango2_get_cpuclock();+ em8xxx_sys_frequency = tango2_get_sysclock();+#endif++#if defined(CONFIG_TANGO2_SIG_BLOCK) || defined(CONFIG_TANGO2_XENV)+ tango2_device_info();+#endif+ return(0);+}++void __init prom_free_prom_memory(void)+{+}++void __init prom_fixup_mem_map(unsigned long start, unsigned long end)+{+}++#if defined(CONFIG_TANGO2_SIG_BLOCK)+int tango2_pcidev_irq_map(const int pci_idsel, const int int_num)+{+ int irq = pcidev_intr_num(sigptr, pci_idsel, int_num);+ if (irq >= 0)+ irq += IRQ_CONTROLLER_IRQ_BASE;+ return(irq);+}++int tango2_isaide_irq_map(void)+{+ int irq = isaide_intr_num(sigptr);+ if (irq >= 0)+ irq += IRQ_CONTROLLER_IRQ_BASE;+ return(irq);+}++int tango2_isaide_cs_select(void)+{+ return(isaide_cs_select(sigptr));+}++int tango2_isaide_timing_slot(void)+{+ return(isaide_timing_slot(sigptr));+}++int tango2_isaide_enabled(void)+{+ return(isaide_enabled(sigptr));+}++int tango2_bmide_enabled(void)+{+ return(bmide_enabled(sigptr));+}++int tango2_sata_enabled(void)+{+ return(sata_enabled(sigptr));+}++int tango2_pci_host_enabled(void)+{+ return(pci_host_enabled(sigptr));+}++int tango2_ir_enabled(void)+{+ return(ir_enabled(sigptr));+}++int tango2_fip_enabled(void)+{+ return(fip_enabled(sigptr));+}++int tango2_ethernet_enabled(void)+{+ return(ethernet_enabled(sigptr));+}++int tango2_sdio_enabled(void)+{+ return(sdio_enabled(sigptr));+}++int tango2_usb_enabled(void)+{+ return(usb_enabled(sigptr));+}++int tango2_i2cm_enabled(void)+{+ return(i2cm_enabled(sigptr));+}++int tango2_i2cs_enabled(void)+{+ return(i2cs_enabled(sigptr));+}++int tango2_scard_enabled(void) +{+ return(scard_enabled(sigptr));+}++int tango2_gnet_enabled(void) +{+ return(gnet_enabled(sigptr));+}++int tango2_pcidev_enabled(const int pci_idsel)+{+ if (tango2_pci_host_enabled())+ return(pcidev_enabled(sigptr, pci_idsel));+ else+ return(0);+}++int tango2_ethernet_getmac(unsigned char *mac)+{+ if (tango2_ethernet_enabled() == 0)+ return(0);+ else {+ mac[0] = (sigptr->hwinfo.mac_hi >> 8) & 0xff;+ mac[1] = (sigptr->hwinfo.mac_hi >> 0) & 0xff;+ mac[2] = (sigptr->hwinfo.mac_lo >> 24) & 0xff;+ mac[3] = (sigptr->hwinfo.mac_lo >> 16) & 0xff;+ mac[4] = (sigptr->hwinfo.mac_lo >> 8) & 0xff;+ mac[5] = (sigptr->hwinfo.mac_lo >> 0) & 0xff;+ }+ return(1);+}++#elif defined(CONFIG_TANGO2_XENV)++int tango2_isaide_enabled(void)+{+ return((((xenv_enabled_devices >> ISAIDE_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_bmide_enabled(void)+{+ return((((xenv_enabled_devices >> BMIDE_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_sata_enabled(void)+{+ return((((xenv_enabled_devices >> SATA_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_pci_host_enabled(void)+{+ return((((xenv_enabled_devices >> PCIHOST_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_ir_enabled(void)+{+ return((((xenv_enabled_devices >> IR_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_fip_enabled(void)+{+ return((((xenv_enabled_devices >> FIP_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_ethernet_enabled(void)+{+ return((((xenv_enabled_devices >> ETHERNET_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_sdio_enabled(void)+{+ return((((xenv_enabled_devices >> SDIO_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_usb_enabled(void)+{+ return((((xenv_enabled_devices >> USB_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_i2cm_enabled(void)+{+ return((((xenv_enabled_devices >> I2CM_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_i2cs_enabled(void)+{+ return((((xenv_enabled_devices >> I2CS_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_scard_enabled(void) +{+ return((((xenv_enabled_devices >> SCARD_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_gnet_enabled(void) +{+ return((((xenv_enabled_devices >> GNET_SHIFT) & 1) != 0) ? 1 : 0);+}++int tango2_pcidev_enabled(const int pci_idsel)+{+ return((((xenv_enabled_devices >> (pci_idsel - 1 + PCI1_SHIFT)) & 1) != 0) ? 1 : 0);+}++int tango2_ethernet_getmac(unsigned char *mac)+{+ if (tango2_ethernet_enabled() == 0)+ return(0);+ else if ((xenv_mac_hi != 0) || (xenv_mac_lo != 0)) {+ mac[0] = (xenv_mac_hi >> 8) & 0xff;+ mac[1] = (xenv_mac_hi >> 0) & 0xff;+ mac[2] = (xenv_mac_lo >> 24) & 0xff;+ mac[3] = (xenv_mac_lo >> 16) & 0xff;+ mac[4] = (xenv_mac_lo >> 8) & 0xff;+ mac[5] = (xenv_mac_lo >> 0) & 0xff;+ return(1);+ }+ return(0);+}++int tango2_pcidev_irq_map(const int pci_idsel, const int int_num)+{+ int route = xenv_pcidev_irq_route[pci_idsel - 1];+ int irq;++ irq = (int)((route >> (int_num * 8)) & 0x3); /* int_num: 0-3 = INTA-D */+ if (irq >= 0)+ irq += (IRQ_CONTROLLER_IRQ_BASE + LOG2_CPU_PCI_INTA);+ return(irq);+}++int tango2_isaide_irq_map(void)+{+ int irq = 0;++ if (tango2_isaide_enabled() == 0)+ return(-1);++ if (xenv_isaide_irq >= 0)+ irq = xenv_isaide_irq + (IRQ_CONTROLLER_IRQ_BASE + LOG2_CPU_PCI_INTA);+ return(irq);+}++int tango2_isaide_cs_select(void)+{+ int i;+ unsigned long cs_config = (gbus_read_uint32(pGBus, REG_BASE_host_interface + PB_CS_config) >> 12) & 0xf;++ if (tango2_isaide_enabled() == 0)+ return(-1);++ for (i = 0; i < 4; i++) {+ if ((cs_config & 0x1) != 0)+ return(i);+ else+ cs_config >>= 1;+ }+ return(-1);+}++int tango2_isaide_timing_slot(void)+{+ return(xenv_isaide_timing_slot & 0x7);+}++#endif ++#if defined(CONFIG_TANGO2_SIG_BLOCK) || defined(CONFIG_TANGO2_XENV)++static int tango2_device_info(void)+{+ int i;++#if defined(CONFIG_TANGO2_SIG_BLOCK)+ printk("SMP863x Enabled Devices under Linux/SIGBLOCK = 0x%08lx\n ", sigptr->hwinfo.dev_enabled);+#else+ printk("SMP863x Enabled Devices under Linux/XENV 0x%08lx = 0x%08lx\n ", xenv_gbus_addr, xenv_enabled_devices);+#endif+ if (tango2_isaide_enabled())+ printk(" ISA/IDE");+ if (tango2_bmide_enabled())+ printk(" BM/IDE");+ if (tango2_pci_host_enabled())+ printk(" PCIHost");+ if (tango2_ethernet_enabled())+ printk(" Ethernet");+ if (tango2_ir_enabled())+ printk(" IR");+ if (tango2_fip_enabled())+ printk(" FIP");+ if (tango2_i2cm_enabled())+ printk(" I2CM");+ if (tango2_i2cs_enabled())+ printk(" I2CS");+ if (tango2_sdio_enabled())+ printk(" SDIO");+ if (tango2_usb_enabled())+ printk(" USB");+ for (i = 1; i <= 6; i++) {+ if (tango2_pcidev_enabled(i))+ printk(" PCIDev%d", i);+ }+ if (tango2_sata_enabled())+ printk(" SATA");+ if (tango2_scard_enabled())+ printk(" SCARD");+ if (tango2_gnet_enabled())+ printk(" GNET");+ printk("\n");+}++EXPORT_SYMBOL(tango2_pcidev_irq_map);+EXPORT_SYMBOL(tango2_isaide_irq_map);+EXPORT_SYMBOL(tango2_isaide_cs_select);+EXPORT_SYMBOL(tango2_isaide_timing_slot);+EXPORT_SYMBOL(tango2_isaide_enabled);+EXPORT_SYMBOL(tango2_bmide_enabled);+EXPORT_SYMBOL(tango2_sata_enabled);+EXPORT_SYMBOL(tango2_pci_host_enabled);+EXPORT_SYMBOL(tango2_ir_enabled);+EXPORT_SYMBOL(tango2_fip_enabled);+EXPORT_SYMBOL(tango2_ethernet_enabled);+EXPORT_SYMBOL(tango2_sdio_enabled);+EXPORT_SYMBOL(tango2_usb_enabled);+EXPORT_SYMBOL(tango2_scard_enabled);+EXPORT_SYMBOL(tango2_gnet_enabled);+EXPORT_SYMBOL(tango2_i2cm_enabled);+EXPORT_SYMBOL(tango2_i2cs_enabled);+EXPORT_SYMBOL(tango2_pcidev_enabled);+EXPORT_SYMBOL(tango2_ethernet_getmac);++#if defined(CONFIG_TANGO2_XENV)+EXPORT_SYMBOL(xenv_scard_5v_pin);+EXPORT_SYMBOL(xenv_scard_off_pin);+EXPORT_SYMBOL(xenv_scard_cmd_pin);+#endif++#endif /* CONFIG_TANGO2_SIG_BLOCK || defined(CONFIG_TANGO2_XENV) */++EXPORT_SYMBOL(tango2_get_sysclock);+EXPORT_SYMBOL(tango2_get_cpuclock);++RMuint32 gbus_read_dram_uint32(struct gbus *pgbus, RMuint32 byte_address);+RMuint16 gbus_read_dram_uint16(struct gbus *pgbus, RMuint32 byte_address);+RMuint8 gbus_read_dram_uint8(struct gbus *pgbus, RMuint32 byte_address);+void gbus_write_dram_uint32(struct gbus *pgbus, RMuint32 byte_address, RMuint32 data);+void gbus_write_dram_uint16(struct gbus *pgbus, RMuint32 byte_address, RMuint16 data);+void gbus_write_dram_uint8(struct gbus *pgbus, RMuint32 byte_address, RMuint8 data);++#define TMP_REMAPPED_REG CPU_remap4+#define TMP_REMAPPED_BASE CPU_remap4_address++static RMuint32 set_remap(RMuint32 remap_reg, RMuint32 value)+{+ RMuint32 orig = *((volatile RMuint32 *)KSEG1ADDR(REG_BASE_cpu_block + remap_reg));+ if (orig != value) {+ *((volatile RMuint32 *)KSEG1ADDR(REG_BASE_cpu_block + remap_reg)) = value;+ iob();+ }+ return(orig);+}++RMuint32 gbus_read_uint32(struct gbus *pgbus, RMuint32 byte_address)+{+ RMuint32 remap;+ RMuint32 tmp;++ if (byte_address < (MEM_BASE_dram_controller_0 + 0x10000000))+ return gbus_read_dram_uint32(pgbus, byte_address);+ else if (byte_address < (MEM_BASE_dram_controller_1 + 0x10000000))+#ifdef CONFIG_TANGO2_USE_TLB_REMAP_DRAM1 + if (byte_address < (MEM_BASE_dra
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -