Exemple #1
0
static void platform_fixups(void)
{
    u64 val;
    void *nvrtc;

    dt_fixup_memory(0, mem_size);
    planetcore_set_mac_addrs(table);

    if (!planetcore_get_decimal(table, PLANETCORE_KEY_CRYSTAL_HZ, &val)) {
        printf("No PlanetCore crystal frequency key.\r\n");
        return;
    }
    ibm405gp_fixup_clocks(val, 0xa8c000);
    ibm4xx_quiesce_eth((u32 *)0xef600800, NULL);
    ibm4xx_fixup_ebc_ranges("/plb/ebc");

    if (!planetcore_get_decimal(table, PLANETCORE_KEY_KB_NVRAM, &val)) {
        printf("No PlanetCore NVRAM size key.\r\n");
        return;
    }
    nvrtc = finddevice("/plb/ebc/nvrtc@4,200000");
    if (nvrtc != NULL) {
        u32 reg[3] = { 4, 0x200000, 0};
        getprop(nvrtc, "reg", reg, 3);
        reg[2] = (val << 10) & 0xffffffff;
        setprop(nvrtc, "reg", reg, 3);
    }
}
Exemple #2
0
static void platform_fixups(void)
{
	void *soc;

	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr,
	                       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.
	 */
	soc = find_node_by_devtype(NULL, "soc");
	if (soc) {
		void *serial = NULL;

		setprop(soc, "bus-frequency", &bd.bi_busfreq,
		        sizeof(bd.bi_busfreq));

		while ((serial = find_node_by_devtype(serial, "serial"))) {
			if (get_parent(serial) != soc)
				continue;

			setprop(serial, "clock-frequency", &bd.bi_busfreq,
			        sizeof(bd.bi_busfreq));
		}
	}
}
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 *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));
}
Exemple #5
0
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 kilauea_fixups(void)
{
	unsigned long sysclk = 33333333;

	ibm405ex_fixup_clocks(sysclk, KILAUEA_SYS_EXT_SERIAL_CLOCK);
	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
	dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
	dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
}
Exemple #7
0
static void platform_fixups(void)
{
	void *tsi;

	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
	dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
	tsi = find_node_by_devtype(NULL, "tsi-bridge");
	if (tsi)
		setprop(tsi, "bus-frequency", &bd.bi_busfreq,
			sizeof(bd.bi_busfreq));
}
static void platform_fixups(void)
{
	void *node;

	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	dt_fixup_mac_addresses(bd.bi_enetaddr);
	dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 16, bd.bi_busfreq);

	node = finddevice("/soc/cpm/brg");
	if (node) {
		printf("BRG clock-frequency <- 0x%x (%dMHz)\r\n",
		       bd.bi_busfreq, MHZ(bd.bi_busfreq));
		setprop(node, "clock-frequency",  &bd.bi_busfreq, 4);
	}
}
static void pq2_platform_fixups(void)
{
	void *node;

	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
	dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);

	node = finddevice("/soc/cpm");
	if (node)
		setprop(node, "clock-frequency", &bd.bi_cpmfreq, 4);

	node = finddevice("/soc/cpm/brg");
	if (node)
		setprop(node, "clock-frequency",  &bd.bi_brgfreq, 4);

	update_cs_ranges();
	fixup_pci();
}
void platform_init(unsigned long null_check)
{
	const u32 heapsize = 0x1000000 - (u32)_end; /* 16MiB */
	void *chosen;
	unsigned long ft_addr;
	u64 rm_size;
	unsigned long val;

	console_ops.write = ps3_console_write;
	platform_ops.exit = ps3_exit;

	printf("\n-- PS3 bootwrapper --\n");

	simple_alloc_init(_end, heapsize, 32, 64);
	fdt_init(_dtb_start);

	chosen = finddevice("/chosen");

	ps3_repository_read_rm_size(&rm_size);
	dt_fixup_memory(0, rm_size);

	if (_initrd_end > _initrd_start) {
		setprop_val(chosen, "linux,initrd-start", (u32)(_initrd_start));
		setprop_val(chosen, "linux,initrd-end", (u32)(_initrd_end));
	}

	prep_cmdline(chosen);

	ft_addr = dt_ops.finalize();

	ps3_copy_vectors();

	printf(" flat tree at 0x%lx\n\r", ft_addr);

	val = *(unsigned long *)0;

	if (val != null_check)
		printf("null check failed: %lx != %lx\n\r", val, null_check);

	((kernel_entry_t)0)(ft_addr, 0, NULL);

	ps3_exit();
}
static void platform_fixups(void)
{
	void *soc;

	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	dt_fixup_mac_addresses(bd.bi_enetaddr);
	dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);

	soc = find_node_by_devtype(NULL, "soc");
	if (soc) {
		void *serial = NULL;

		setprop(soc, "bus-frequency", &bd.bi_busfreq,
		        sizeof(bd.bi_busfreq));

		while ((serial = find_node_by_devtype(serial, "serial"))) {
			if (get_parent(serial) != soc)
				continue;

			setprop(serial, "clock-frequency", &bd.bi_busfreq,
			        sizeof(bd.bi_busfreq));
		}
	}
}
Exemple #12
0
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", &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", &reg, sizeof(reg)) == sizeof(reg)) {
			top -= reg[3];
			printf("ehci %08X -> %08X\n", reg[2], top);
			reg[2] = top;
			setprop(devp, "reg", &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", &reg, sizeof(reg)) == sizeof(reg)) {
			top -= reg[3];
			printf("ohci %08X -> %08X\n", reg[2], top);
			reg[2] = top;
			setprop(devp, "reg", &reg, sizeof(reg));
		}
	}

	/* fixup available memory */
	dt_fixup_memory(0, top);

	printf("top of mem @ %08X (%s)\n", top, "final");

	return;

err_out:
	return;
}
Exemple #13
0
static void platform_fixups(void)
{
	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
	dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
}