b9bb868e2f
1.Add X1830 system type for cat /proc/cpuinfo to give out X1830. 2.Change "PRID_IMP_XBURST" to "PRID_IMP_XBURST_REV1" and add a new "PRID_IMP_XBURST_REV2" for new Ingenic CPUs which has XBurst with MXU2 SIMD ISA. Notice: 1."PRID_IMP_XBURST_REV2" is corresponds to the latest XBurst processor with 128bit MXU2 SIMD instruction set, not the upcoming XBurst2 processor. This version of the processors fixes issues such as BTB and HPTLB. 2.In order to simplify and reuse the code, the "c->cputype" and the "c->writecombine" and the "__cpu_name[cpu]" in the original "PRID_IMP_XBURST" (now is "PRID_IMP_XBURST_REV1") are removed, and the corresponding settings are abtained through fall-through to "PRID_IMP_XBURST_REV2", which will cause the name that was previously mistakenly called "JZRISC" to become to the real name "XBurst". Signed-off-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com> Signed-off-by: Paul Burton <paulburton@kernel.org> Cc: linux-mips@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: yamada.masahiro@socionext.com Cc: tglx@linutronix.de Cc: chenhc@lemote.com Cc: tbogendoerfer@suse.de Cc: paul.burton@mips.com Cc: paul@crapouillou.net Cc: jhogan@kernel.org Cc: fancer.lancer@gmail.com Cc: ralf@linux-mips.org Cc: jiaxun.yang@flygoat.com
108 lines
2.3 KiB
C
108 lines
2.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de>
|
|
* Copyright (C) 2011, Maarten ter Huurne <maarten@treewalker.org>
|
|
* JZ4740 setup code
|
|
*/
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/io.h>
|
|
#include <linux/irqchip.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/libfdt.h>
|
|
#include <linux/of_fdt.h>
|
|
|
|
#include <asm/bootinfo.h>
|
|
#include <asm/prom.h>
|
|
|
|
#include "reset.h"
|
|
|
|
#define JZ4740_EMC_BASE_ADDR 0x13010000
|
|
|
|
#define JZ4740_EMC_SDRAM_CTRL 0x80
|
|
|
|
static void __init jz4740_detect_mem(void)
|
|
{
|
|
void __iomem *jz_emc_base;
|
|
u32 ctrl, bus, bank, rows, cols;
|
|
phys_addr_t size;
|
|
|
|
jz_emc_base = ioremap(JZ4740_EMC_BASE_ADDR, 0x100);
|
|
ctrl = readl(jz_emc_base + JZ4740_EMC_SDRAM_CTRL);
|
|
bus = 2 - ((ctrl >> 31) & 1);
|
|
bank = 1 + ((ctrl >> 19) & 1);
|
|
cols = 8 + ((ctrl >> 26) & 7);
|
|
rows = 11 + ((ctrl >> 20) & 3);
|
|
printk(KERN_DEBUG
|
|
"SDRAM preconfigured: bus:%u bank:%u rows:%u cols:%u\n",
|
|
bus, bank, rows, cols);
|
|
iounmap(jz_emc_base);
|
|
|
|
size = 1 << (bus + bank + cols + rows);
|
|
add_memory_region(0, size, BOOT_MEM_RAM);
|
|
}
|
|
|
|
static unsigned long __init get_board_mach_type(const void *fdt)
|
|
{
|
|
if (!fdt_node_check_compatible(fdt, 0, "ingenic,x1830"))
|
|
return MACH_INGENIC_X1830;
|
|
if (!fdt_node_check_compatible(fdt, 0, "ingenic,x1000"))
|
|
return MACH_INGENIC_X1000;
|
|
if (!fdt_node_check_compatible(fdt, 0, "ingenic,jz4780"))
|
|
return MACH_INGENIC_JZ4780;
|
|
if (!fdt_node_check_compatible(fdt, 0, "ingenic,jz4770"))
|
|
return MACH_INGENIC_JZ4770;
|
|
|
|
return MACH_INGENIC_JZ4740;
|
|
}
|
|
|
|
void __init plat_mem_setup(void)
|
|
{
|
|
int offset;
|
|
void *dtb;
|
|
|
|
jz4740_reset_init();
|
|
|
|
if (__dtb_start != __dtb_end)
|
|
dtb = __dtb_start;
|
|
else
|
|
dtb = (void *)fw_passed_dtb;
|
|
|
|
__dt_setup_arch(dtb);
|
|
|
|
offset = fdt_path_offset(dtb, "/memory");
|
|
if (offset < 0)
|
|
jz4740_detect_mem();
|
|
|
|
mips_machtype = get_board_mach_type(dtb);
|
|
}
|
|
|
|
void __init device_tree_init(void)
|
|
{
|
|
if (!initial_boot_params)
|
|
return;
|
|
|
|
unflatten_and_copy_device_tree();
|
|
}
|
|
|
|
const char *get_system_type(void)
|
|
{
|
|
switch (mips_machtype) {
|
|
case MACH_INGENIC_X1830:
|
|
return "X1830";
|
|
case MACH_INGENIC_X1000:
|
|
return "X1000";
|
|
case MACH_INGENIC_JZ4780:
|
|
return "JZ4780";
|
|
case MACH_INGENIC_JZ4770:
|
|
return "JZ4770";
|
|
default:
|
|
return "JZ4740";
|
|
}
|
|
}
|
|
|
|
void __init arch_init_irq(void)
|
|
{
|
|
irqchip_init();
|
|
}
|