static void platform_fixups(void) { void *devp; dt_fixup_memory(bd.bi_memstart, bd.bi_memsize); dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr); dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr); dt_fixup_mac_address_by_alias("ethernet2", bd.bi_enet2addr); dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 8, bd.bi_busfreq); devp = find_node_by_devtype(NULL, "soc"); if (devp) { void *serial = NULL; setprop(devp, "bus-frequency", &bd.bi_busfreq, sizeof(bd.bi_busfreq)); while ((serial = find_node_by_devtype(serial, "serial"))) { if (get_parent(serial) != devp) continue; setprop(serial, "clock-frequency", &bd.bi_busfreq, sizeof(bd.bi_busfreq)); } } devp = find_node_by_compatible(NULL, "fsl,cpm2-brg"); if (devp) setprop(devp, "clock-frequency", &bd.bi_brgfreq, sizeof(bd.bi_brgfreq)); }
static void platform_fixups(void) { void *devp; dt_fixup_memory(bd.bi_memstart, bd.bi_memsize); dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr); dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr); dt_fixup_mac_address_by_alias("ethernet2", bd.bi_enet2addr); dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 8, bd.bi_busfreq); /* Unfortunately, the specific model number is encoded in the * soc node name in existing dts files -- once that is fixed, * this can do a simple path lookup. */ devp = find_node_by_devtype(NULL, "soc"); if (devp) { void *serial = NULL; setprop(devp, "bus-frequency", &bd.bi_busfreq, sizeof(bd.bi_busfreq)); while ((serial = find_node_by_devtype(serial, "serial"))) { if (get_parent(serial) != devp) continue; setprop(serial, "clock-frequency", &bd.bi_busfreq, sizeof(bd.bi_busfreq)); } } devp = find_node_by_compatible(NULL, "fsl,cpm2-brg"); if (devp) setprop(devp, "clock-frequency", &bd.bi_brgfreq, sizeof(bd.bi_brgfreq)); }
static void platform_fixups(void) { void *soc, *mpic; dt_fixup_memory(0, mem_size); dt_fixup_mac_address_by_alias("ethernet0", enetaddr); dt_fixup_cpu_clocks(int_freq, bus_freq / 8, bus_freq); /* Unfortunately, the specific model number is encoded in the * soc node name in existing dts files -- once that is fixed, * this can do a simple path lookup. */ soc = find_node_by_devtype(NULL, "soc"); if (soc) { void *serial = NULL; setprop(soc, "bus-frequency", &bus_freq, sizeof(bus_freq)); while ((serial = find_node_by_devtype(serial, "serial"))) { if (get_parent(serial) != soc) continue; setprop(serial, "clock-frequency", &bus_freq, sizeof(bus_freq)); } } mpic = find_node_by_compatible(NULL, "fsl,mpic"); if (mpic) setprop(mpic, "clock-frequency", &bus_freq, sizeof(bus_freq)); }
static void *ug_grab_exi_io_base(void) { u32 v; void *devp; devp = find_node_by_compatible(NULL, "nintendo,flipper-exi"); if (devp == NULL) goto err_out; if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v)) goto err_out; return (void *)v; err_out: return NULL; }
static void platform_fixups(void) { struct mipc_infohdr **hdrp, *hdr; u32 reg[4]; u32 mem2_boundary, top; void *devp; /* * The mini header pointer is specified in the second "reg" entry * of the starlet-mini-ipc node. */ devp = find_node_by_compatible(NULL, "twiizers,starlet-mini-ipc"); if (!devp) { printf("unable to find %s node\n", "twiizers,starlet-mini-ipc"); goto err_out; } if (getprop(devp, "reg", ®, sizeof(reg)) != sizeof(reg)) { printf("unable to find %s property\n", "reg"); goto err_out; } hdrp = (struct mipc_infohdr **)reg[2]; if (mipc_check_address((u32)hdrp)) { printf("mini: invalid hdrp %08X\n", (u32)hdrp); goto err_out; } hdr = *hdrp; if (mipc_check_address((u32)hdr)) { printf("mini: invalid hdr %08X\n", (u32)hdr); goto err_out; } if (memcmp(hdr->magic, "IPC", 3)) { printf("mini: invalid magic, asuming ios\n"); goto err_out; } mem2_boundary = hdr->mem2_boundary; if (mipc_check_address(mem2_boundary)) { printf("mini: invalid mem2_boundary %08X\n", mem2_boundary); goto err_out; } top = mem2_boundary; printf("top of mem @ %08X (%s)\n", top, "current"); /* fixup local memory for EHCI controller */ devp = NULL; while ((devp = find_node_by_compatible(devp, "nintendo,hollywood-ehci"))) { if (getprop(devp, "reg", ®, sizeof(reg)) == sizeof(reg)) { top -= reg[3]; printf("ehci %08X -> %08X\n", reg[2], top); reg[2] = top; setprop(devp, "reg", ®, sizeof(reg)); } } /* fixup local memory for OHCI controllers */ devp = NULL; while ((devp = find_node_by_compatible(devp, "nintendo,hollywood-ohci"))) { if (getprop(devp, "reg", ®, sizeof(reg)) == sizeof(reg)) { top -= reg[3]; printf("ohci %08X -> %08X\n", reg[2], top); reg[2] = top; setprop(devp, "reg", ®, sizeof(reg)); } } /* fixup available memory */ dt_fixup_memory(0, top); printf("top of mem @ %08X (%s)\n", top, "final"); return; err_out: return; }
static void c2k_bridge_setup(u32 mem_size) { u32 i, v[30], enables, acc_bits; u32 pci_base_hi, pci_base_lo, size, buf[2]; unsigned long cpu_base; int rc; void *devp, *mv64x60_devp; u8 *bridge_pbase, is_coherent; struct mv64x60_cpu2pci_win *tbl; int bus; bridge_pbase = mv64x60_get_bridge_pbase(); is_coherent = mv64x60_is_coherent(); if (is_coherent) acc_bits = MV64x60_PCI_ACC_CNTL_SNOOP_WB | MV64x60_PCI_ACC_CNTL_SWAP_NONE | MV64x60_PCI_ACC_CNTL_MBURST_32_BYTES | MV64x60_PCI_ACC_CNTL_RDSIZE_32_BYTES; else acc_bits = MV64x60_PCI_ACC_CNTL_SNOOP_NONE | MV64x60_PCI_ACC_CNTL_SWAP_NONE | MV64x60_PCI_ACC_CNTL_MBURST_128_BYTES | MV64x60_PCI_ACC_CNTL_RDSIZE_256_BYTES; mv64x60_config_ctlr_windows(bridge_base, bridge_pbase, is_coherent); mv64x60_devp = find_node_by_compatible(NULL, "marvell,mv64360"); if (mv64x60_devp == NULL) fatal("Error: Missing marvell,mv64360 device tree node\n\r"); enables = in_le32((u32 *)(bridge_base + MV64x60_CPU_BAR_ENABLE)); enables |= 0x007ffe00; /* Disable all cpu->pci windows */ out_le32((u32 *)(bridge_base + MV64x60_CPU_BAR_ENABLE), enables); /* Get the cpu -> pci i/o & mem mappings from the device tree */ devp = NULL; for (bus = 0; ; bus++) { char name[] = "pci "; name[strlen(name)-1] = bus+'0'; devp = find_node_by_alias(name); if (devp == NULL) break; if (bus >= 2) fatal("Error: Only 2 PCI controllers are supported at" \ " this time.\n"); mv64x60_config_pci_windows(bridge_base, bridge_pbase, bus, 0, mem_size, acc_bits); rc = getprop(devp, "ranges", v, sizeof(v)); if (rc == 0) fatal("Error: Can't find marvell,mv64360-pci ranges" " property\n\r"); /* Get the cpu -> pci i/o & mem mappings from the device tree */ for (i = 0; i < rc; i += 6) { switch (v[i] & 0xff000000) { case 0x01000000: /* PCI I/O Space */ tbl = mv64x60_cpu2pci_io; break; case 0x02000000: /* PCI MEM Space */ tbl = mv64x60_cpu2pci_mem; break; default: continue; } pci_base_hi = v[i+1]; pci_base_lo = v[i+2]; cpu_base = v[i+3]; size = v[i+5]; buf[0] = cpu_base; buf[1] = size; if (!dt_xlate_addr(devp, buf, sizeof(buf), &cpu_base)) fatal("Error: Can't translate PCI address " \ "0x%x\n\r", (u32)cpu_base); mv64x60_config_cpu2pci_window(bridge_base, bus, pci_base_hi, pci_base_lo, cpu_base, size, tbl); } enables &= ~(3<<(9+bus*5)); /* Enable cpu->pci<bus> i/o, cpu->pci<bus> mem0 */ out_le32((u32 *)(bridge_base + MV64x60_CPU_BAR_ENABLE), enables); }; }