
In QEMU we implement a PV machine type called "ppce500". That board is able to run any e500+ FSL cores (e500v2, e500mc, e5500, e6500).
It is heavily inspired by the MPC8544DS SoC and board combination, but implements only the bare minimum to make Linux happy enough to drive a virtual machine.
This patch set implements support for this PV machine type in U-Boot, enabling users to run their virtual machines with netboot, u-boot payload binaries or other fun things they come up with.
---
v1 -> v2:
- Write device tree offset directly into global variable - use r4 rather than r2 for that - access fdt directly from in-memory copy - remove unneeded header includes - clean up pci enumeration - coding style fixes - populate and only use fdt_addr_r - remove unused exported functions - remove unused TLB0 entries - make TLB1 I/O maps non-executable - remove unused defines in board header - make -kernel boot variables more clear - remove TLB0 invalidation - use tlb1.14 for temporary as=1 map - use CONFIG_SYS_MPC85XX_NO_RESETVEC - store fdt pointer in gd through cpu_init_early_f() - replace fixup_tlb1() with dynamic TLB creation hook - find CCSRBAR from device tree - find PCI controllers from device tree - find CPU speed from device tree
v2 -> v3:
- new patch: fdt_support: split fdt_getprop_u32_default - new patch: fdt_support: Add helper function to read "ranges" property - new patch: PPC: 85xx: Remove IVOR reset - removed patch: PPC 85xx: Detect e500v2 / e500mc during runtime - merge dt patches into machine patch - Document and rename CONFIG_SYS_USE_DYNAMIC_TLBS - remove CONFIG_DDR_SPD - Reduce PCI message to only base address - Map AS=1 fdt behind CCSRBAR - Use CONFIG_SYS_CCSR_DO_NOT_RELOCATE - remove unnecessary ccsr map - s/cell size/cell count/ - add temporary map define - use fdt_get_base_address() to find region - use new APIs - remove myfdt helpers
v3 -> v4:
- tlb_map_range: return unmapped size - tlb_map_range: take ram/io parameter as enum rather than bool - use new tlb map syntax - check that tlb map mapped everything - always save/restore r3 for cpu_init_early_f - remove CONFIG_DYNAMIC_CCSRBAR - make init_tlbs weak and remove all init_tlbs_dynamic() cruft - always map fdt to fixed virtual address - fold together AS=1 fdt map functions - use tlb_map_range for CCSR map - search for PCI based on device type rather than compatible - remove unnecessary cast - call get_linear_ram_size directly - override get_tbclk with timebase-frequency fetching code
Alexander Graf (6): fdt_support: split fdt_getprop_u32_default fdt_support: Add helper function to read "ranges" property PPC: 85xx: Remove IVOR reset PPC: 85xx: Generalize DDR TLB mapping function PPC 85xx: Add ELF entry point PPC 85xx: Add qemu-ppce500 machine
arch/powerpc/cpu/mpc85xx/Makefile | 2 + arch/powerpc/cpu/mpc85xx/cpu.c | 4 +- arch/powerpc/cpu/mpc85xx/cpu_init.c | 4 - arch/powerpc/cpu/mpc85xx/cpu_init_early.c | 8 +- arch/powerpc/cpu/mpc85xx/fixed_ivor.S | 63 ----- arch/powerpc/cpu/mpc85xx/release.S | 3 - arch/powerpc/cpu/mpc85xx/start.S | 17 +- arch/powerpc/cpu/mpc85xx/tlb.c | 48 ++-- arch/powerpc/cpu/mpc85xx/u-boot.lds | 1 + arch/powerpc/include/asm/config_mpc85xx.h | 4 + arch/powerpc/include/asm/mmu.h | 8 + board/freescale/qemu-ppce500/Makefile | 9 + board/freescale/qemu-ppce500/qemu-ppce500.c | 345 ++++++++++++++++++++++++++ boards.cfg | 1 + common/fdt_support.c | 132 +++++++++- include/configs/qemu-ppce500.h | 203 +++++++++++++++ include/fdt_support.h | 4 + nand_spl/board/freescale/mpc8536ds/Makefile | 4 - nand_spl/board/freescale/mpc8569mds/Makefile | 4 - nand_spl/board/freescale/mpc8572ds/Makefile | 4 - nand_spl/board/freescale/p1023rds/Makefile | 4 - nand_spl/board/freescale/p1_p2_rdb/Makefile | 4 - 22 files changed, 757 insertions(+), 119 deletions(-) delete mode 100644 arch/powerpc/cpu/mpc85xx/fixed_ivor.S create mode 100644 board/freescale/qemu-ppce500/Makefile create mode 100644 board/freescale/qemu-ppce500/qemu-ppce500.c create mode 100644 include/configs/qemu-ppce500.h