[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v9 00/24] hw/arm: add Faraday A369 SoC platform supp
From: |
Kuo-Jung Su |
Subject: |
[Qemu-devel] [PATCH v9 00/24] hw/arm: add Faraday A369 SoC platform support |
Date: |
Mon, 25 Mar 2013 20:09:36 +0800 |
From: Kuo-Jung Su <address@hidden>
These patches introduce Faraday A369 SoC platform support.
Here are some public documents for your reference.
http://www.faraday-tech.com/html/documentation/index.html
The partial version of faraday cpu datasheet with only
the CP15 and MPU description are available at my Google Drive:
https://docs.google.com/folder/d/0BwfiewvSmUgAalh5TkxyZWtlWEE/edit?usp=sharing
The pre-built A369 images are also available at my Google Drive:
https://docs.google.com/folder/d/0BwfiewvSmUgAX2pTTmtUMGFCZW8/edit
Here is the image file list:
1. android-4.0.4/zImage: A369 linux-3.0.31
2. android-4.0.4/romfs-4.0.4.tar.bz2: android-4.0.4
3. nand.img.bz2: A369 nand flash image
4. rom.img.bz2: A369 embedded ROM image
5. u-boot: A369 u-boot-2012.10 ELF file
6. zImage: A369 linux-3.4.12 + initramfs
7. README
If you want to re-build the image from scratch,
try my Faraday Linux BSP/SDK: falinux.
1. Download the falinux
$ git clone https://github.com/dantesu1218/falinux.git
2. Download all the required software packages:
$ cd falinux
$ make setup
3. Launch the menuconfig of falinux, and enable 'QEMU Support'
$ make menuconfig
4. Re-build the packages
$ make
5. Laungh the qemu-1.3.0 with the generated falinux images.
$ make qemu
Changes for v8 -> v9:
1. hw/arm: Update the file directory structure (Addressed by Peter.M)
hw/arm: top level board models and things directly reference the CPU only
hw: otherwise
2. hw/arm: Rename SoC platform specific files:
hw/arm/faraday_a369.c -> hw/arm/ftplat_a369.c
hw/arm/faraday_a369_soc.c -> hw/arm/ftplat_a369soc.c
hw/arm/faraday_a369_scu.c -> hw/arm/ftplat_a369scu.c
hw/arm/faraday_a369_kpd.c -> hw/arm/ftplat_a369kpd.c
3. hw: audio_codec.[ch] -> audio.[ch]
4. hw/fti2c010: Drop .addr from Fti2c010State. (Addressed by Peter.C)
5. hw/fti2c010: Add qemu_log_mask(LOG_UNIMP, ) to slave mode. (Addressed by
Peter.C)
6. hw/fti2c010: Update data type of Fti2c010State.recv from 'uint8_t' into
'bool'.
7. hw/*.c: QOM Coding Conventions (Addressed by Peter.C)
8. hw/*.h: Inlcudes bitops only if they need it. (Addressed by Peter.C)
9. hw/ftplat_a369soc: Add a container memory region for remappable devices.
(i.e. ROM, RAM)
(Addressed by Peter.C and Peter.M)
10. hw/faraday.h: Drop cpu, cpu_model, ahb_remapped, ddr_inited, rom_size,
ram_size
scu, ahbc, ddrc from FaradaySoCState.
11. hw/faraday.h: Replace FaradaySoCState.bi with FaradaySoCState.ram_boot
12. hw/arm/ftplat_a369soc: Move customized system reset to ftplat_a369.c
13. hw/faraday.h: Add faraday_soc_ahb_remap() and faraday_soc_ram_setup()
for ftddrii030, ftahbc020, ftplat_a369soc and ftplat_a369.
14. hw/ftahbc020, ftapbbrg020, ftddrii030, ftnandc021, ftssp010.c:
Move object_property_add_link() to object::instance_init()
Changes for v7 -> v8:
1. [hw/arm/ftintc020.c] (Addressed by Peter)
'uint32_t mask = BIT(irq % 32);' -> 'uint32_t mask = BIT(irq & 0x1f);'
2. [hw/arm/*.c] (Addressed by Peter)
Drop '#include "faraday.h"', and define DPRINTF() at per-file basis
exit(1) -> abort()
SysBusDeviceClass::init() -> Device::realize()
Changes for v6 -> v7:
1. hw/arm/ftwdt010: (Addressed by Paolo)
Replace 'qemu_system_reset_request()' with 'watchdog_perform_action()'.
2. hw/arm/ftrtc011: (Addressed by Paolo)
Replace 'get_clock_realtime()' with 'qemu_get_clock_ns(rtc_clock)'.
Replace 'qemu_new_timer_ms(rt_clock...)' with
'qemu_new_timer_ms(rtc_clock...)'
Rename 'ftrtc011_timer_resync' -> 'ftrtc011_timer_rebase'
Add ftrtc011_timer_resche()
Add QTest support
3. hw/arm/faraday_a369_soc: (Addressed by Paolo)
Remove redundant device reset from a369soc_system_reset(...)
4. include/qemu/bitops.h: (Addressed by Paolo)
Update bitrev8() to use a kind of divide and conquer algorithm.
5. hw/arm/ftahb020,ftddrii030,ftapbbrg020,faraday_a369_soc:
Drop FARADAY_SOC_GET_CORE(), replaced with device to device QOM link.
6. hw/wm8731,wm8750,marvell_88w8618_audio,spitz,z2:
Add AudioCodecClass for wm87xx audio class abstration.
7. hw/arm/ftnandc021:
Drop nand_init(), replaced with device to device QOM link.
8. hw/arm/ftsdc010:
Bug fixed to write operation: remove sd_data_ready() in write path.
9. hw/arm/ftgmac100,ftmac110,ftwdt010:
rt-clock -> vm_clock
10. hw/nand.c:
Drop [hw/nand.c: correct the sense of the BUSY/READY], since it's
already applied.
Drop [hw/nand.c: bug fix to erase operation], since Peter has a better
solution.
Changes for v5 -> v6:
1. hw/arm/Makefile.objs:
Shift to the next line only after current line length is > 80 characters.
2. hw/arm/faraday.h:
Update debug macro format per discussions at the link bellow:
http://thread.gmane.org/gmane.comp.emulators.qemu/195996/focus=196975
3. hw/arm/faraday.h:
TYPE_FARADAY_SOC: 'faraday/soc' -> 'faraday.soc'
4. hw/arm/*.c:
Replace '%llx' with '%HWADDR_PRIx'
5. hw/arm/*.h:
Add '#include "qemu/bitops.h"'
6. hw/arm/faraday_a369_soc.c:
Typo fix: salve4 -> slave4, salve6 -> slave6
7. hw/arm/*.c:
Drop FROM_SYSBUS().
8. hw/arm/ftintc020.c:
Re-write the source file with pl190.c as template.
9. hw/arm/ftintc020.h:
Rename the registers to improve readibility.
10. hw/arm/faraday.h:
Add dedicated spi flash pointer array (DeviceState *spi_fl[2]).
11. hw/arm/faraday.h:
Add 'qemu_irq pic[64]'.
12. hw/arm/*c:
Replace the complex conversion in XXX_REG32() with directly array
indexing.
13. hw/arm/*c:
Update the error message output from 'hw_error(...)' into
'fprintf(stderr, ...)'
14. hw/arm/faraday_a369.c, hw/arm/faraday_a369_soc.c:
Move the external AHB device init from faraday_a369_soc.c to
faraday_a369.c
15. include/qemu/bitops.h:
Move bitrev() from bitrev.[ch] into bitops.h
16. hw/nand.c:
Remove the clear/set SR[6] code in read/erase/write, because
it's not possible to be observed by a guest.
17. hw/arm/faraday_a369_kpd.c:
Function prefix: 'ftkbc010' -> 'a369kpd'
Name of struct: 'FTKBC010State' -> 'A369KPDState'.
QOM: 'FTKBC010' -> 'A369KPD'
18. hw/arm/ftddrii030.c:
'case REG_MCR ... 0x4c' -> 'case REG_MCR ... (CFG_REGSIZE - 1) * 4'
19. hw/arm/ftahbc020.c:
Add comments to fall-through path. (i.e. /* fall-through - skip slave6
*/)
20. hw/arm/faraday_a369.c:
Update spi flash init code to use the new QOM classes of m25p80.
Changes for v3 -> v5:
1. [cpu] Add the unapplied patches for faraday ARMv5TE cores.
2. [nand] Add the unapplied patches for hw/nand.c.
3. [audio] Add the unapplied patches for wm8731.
4. [Global] Replace redundant statement in xxx_update_irq() with
qemu_set_irq(s->irq, !!(xxxx));
5. [Global] Introduce 'case xxx ... xxx' statement in switch { }
to replace the 'if {} else {}' statement.
6. [Global] Replace complex bitwise operation with functions defined in
bitops.h
7. [Global] Introduce array register caches (i.e. s->regs[]) implementation
to fttsc010, ftrtc011, ftmac110, ftgmac100, ftddrii030
faraday_a369_kpd and faraday_a369_soc.
8. [Global] Add qemu_log_mask(LOG_GUEST_ERROR...) on undefined memory
accesses.
9. [Global] Add missing register access size constraint to
faraday_a369_kpd, faraday_a369_soc, ftahbc020.c, ftddrii030.c,
ftintc020.c, ftlcdc200.c, ftpwmtmr010.c, ftspi020.c, fttmr010.c
and fttsc010.c.
10. [Global] Add more register and bitmask descriptions to all the chips.
11. [Global] Rename all the MemoryRegionOps variables to 'mmio_ops'
12. [Global] Update all non-system header includes from '<>' into '""'
13. [bitrev] Port bitrev.[ch] from linux kernel into QEMU.
14. [ftapbbrg020] Replace
cpu_physical_memory_read()/cpu_physical_memory_write()
with dma_memory_read()/dma_memory_write()
15. [ftdmac020] Replace cpu_physical_memory_read()/cpu_physical_memory_write()
with dma_memory_read()/dma_memory_write()
16. [ftgmac100/ftmac110] Replace
cpu_physical_memory_read()/cpu_physical_memory_write()
with dma_memory_read()/dma_memory_write()
17. [ftgmac100/ftmac110] Add a 10ms timer for polling the owner bit of
descriptors
to call qemu_flush_queued_packets() when it's necessary.
18. [ftgmac100/ftmac110] Replace hw_error() with
qemu_log_mask(LOG_GUEST_ERROR, )
for programmer errors.
19. [ftgmac100/ftmac110] Update descriptor struct for big endian QEMU host
support.
20. [ftgmac100/ftmac110] Typo fix ('FTMAC_H' --> 'HW_ARM_FTMAC110_H') to the
header files.
21. [ftmac110] Update mdio phy response emulation from Marvell into Davicom
PHY.
22. [ftwdt010/fttsc010] Switch to a slower timer. (i.e. rt_clock)
23. [faraday_a360] Removed. The ftmac110 and fttmr010 has been moved to
A369 as external AHB devices.
24. [faraday_a369] Add register caches for AHB/APB slave devices.
25. [faraday_a369] Remember (arm_boot_info *) when launching in direct boot
mode.
26. [faraday_a369] Replace pointer to (mach *) with QOM APIs. (i.e. no more
DEFINE_PROP_PTR())
27. [faraday_a369] Add a error message for ROM mode when it failed to load
image.
28. [faraday_a369] Add the missing AHB remap process into direct boot mode.
29. [faraday_a369] Bug fix to ROM and RAM memory overlap issue.
30. [faraday_a369] Remove system reset order dependency from ftddrii030 and
ftahbc020
31. [faraday_a369] Separate the a369 platform implementation into 2 different
parts:
board=faraday_a369.c, and soc=faraday_a369_soc.c
32. [faraday_a369] Copy all the un-used register values from read hardware
into QEMU model.
33. [ftssp010] Add address alignment checker.
34. [ftssp010] Move the audio codec initialization code to faraday_a369.c.
35. [ftspi020] Use a constant (CFG_NR_CSLINES) for the number of cs lines.
36. [ftspi020] Replace 's->datacnt <= 0' with '!s->datacnt', because
s->datacnt is unsigned.
37. [ftspi020] Replace 's->datacnt' with 's->cmd[2]'
38. [ftspi020] Remove redundant M25P80s command opcodes from the header file.
39. [ftspi020] Replace 'g_new' with 'g_new0' for cs_lines allocation.
This fix the bug which crash the QEMU when de-activating an
unattached
spi flash chip select. Thanks to Peter.
Changes for v3:
1. [global] review all commit log make sure it correctly
describe the QEMU model.
2. [global] reformat the entire patch series to be compilable
on its own. Thanks to Andreas and Igor.
3. [global] move all files from 'hw' into 'hw/arm', and
rename a36x.c to faraday_a36x.c
4. [global] update lisence to GPLv2+
5. [global] rename both struct and typedef names to CamelCase.
6. [global] turn printfs into DPRINTF() which is controlled
by 'DEBUG_FARADAY'
7. [global] remove disabled code.
8. [global] add header files with descriptive defines to
ftintc020, ftrtc011, fttmr010 ... etc.
9. [global] update all header file to have a 'HW_ARM_' prefix
to header guards.
10. [faraday.h] add parameter names to ftmac110_init() and
ftgmac100_init()
11. [a360/a369] remove printf("xxx %dMB ram.\n"...);
12. [a360/a369] add 'arm926' as a fail-safe cpu model.
13. [a360/a369] add DEFAULT_MACHINE_OPTIONS.
14. [a360/a369] remove USB-EHCI support, it's now a standalone patch.
15. [a360] replace ftlcdc200 init from sysbus_create_varargs() to
sysbus_create_simple().
16. [a360] make PMU a standalone file. (faraday_a360_pmu.c)
17. [a369] make SCU a standalone file. (faraday_a369_pcu.c)
18. [a369] make AHBC a standalone file. (ftahbc020.c)
19. [a369] make DDRC a standalone file. (ftddrii030.c)
20. [a369] rename ftkbc010 to faraday_a369_keypad.c
21. [a369] replace ROM emulation with PFLASH.(rom.c is deleted)
22. [ftsdc010] add sd_data_ready() to data R/W.
23. [ftsdc010] check 'datacnt' at each read/write to make sure
buffer would not overflow/underflow and also prevent
'datacnt' from underflow by subtracted by a 4.
24. [ftgmac100] add 802.1Q VLAN tag insertion/removal support.
25. [ftgmac100] replace the dumb timer code with bottom half.
26. [ftgmac100] rename the struct name of descriptors to CamelCase.
27. [ftgmac100] replace 'void *' with 'Ftgmac100RXD *' and
'Ftgmac100TXD *' for descriptor read/write.
28. [ftgmac100] add buffer overflow check in ftgmac100_transmit()
29. [ftgmac100] add buffer alignment check
30. [ftmac110] replace the dumb timer code with bottom half.
31. [ftmac110] rename the struct name of descriptors to CamelCase.
32. [ftmac110] replace 'void *' with 'Ftmac110RXD *' and
'Ftmac110TXD *' for descriptor read/write.
33. [ftmac110] add buffer overflow check in ftmac110_transmit()
34. [ftmac110] add buffer alignment check
35. [ftdmac020] replace the dumb timer code with bottom half.
36. [ftdmac020] replace cpu_physical_memory_map() with
cpu_physical_memory_read/write() for both simplicity
and security enhancement which caused by the un-checked
return mapped length from cpu_physical_memory_map().
37. [ftapbbrg020] replace the dumb timer code with bottom half.
38. [ftapbbrg020] replace cpu_physical_memory_map() with
cpu_physical_memory_read/write() for both simplicity
and security enhancement which caused by the un-checked
return mapped length from cpu_physical_memory_map().
39. [ftrtc011] switch to a slower timer with msec resolution. (i.e. rt_clock)
40. [ftrtc011] re-calculate RTC counters from host timestamp upon register
read/write and also vm save/restore.
Changes for v2:
1. coding style fixes (verified with checkpatch.pl)
2. add Faraday A360 support
3. add Faraday USB 2.0 EHCI support
4. merge a369_scu.c into a369.c
5. introduce QOM coding style
6. remove lowercase Macros: min(), max()
7. name all struct as CamelCase style
8. move function prototypes from .c to faraday.h
9. use switch instead of if statement in a369_ahbc_write
10. remove debug prints
11. update all uarts in A36x to DEVICE_LITTLE_ENDIAN.
12. move the variable definitions to the start of the function,
instead of inside a do { } while(0)
13. remove disabled and commented out code.
14. use hw_error() and exit() upon pflash register failed.
15. add const prior to TypeInfo (i.e. static *const*
TypeInfo ftrtc011_info)
16. add le32_to_cpu/cpu_to_le32 to the descriptor processing in
FTGMAC100/FTMAC110.
17. update the GPL license to GPL v2 (except for FTLCDC200,
it's based on pl110.c which is LGPL.)
18. add const to src_* in the DMA controllers (FTAPBBRG020/FTDMAC020)
Kuo-Jung Su (24):
target-arm: add Faraday ARMv5TE processors support
hw/arm: add Faraday a369 SoC platform support
hw/arm: add FTINTC020 interrupt controller support
hw/arm: add FTAHBC020 AHB controller support
hw/arm: add FTDDRII030 DDRII controller support
hw/arm: add FTPWMTMR010 timer support
hw/arm: add FTWDT010 watchdog timer support
hw/arm: add FTRTC011 RTC timer support
tests: add QTest for FTRTC011
hw/arm: add FTDMAC020 AHB DMA support
hw/arm: add FTAPBBRG020 APB DMA support
hw/arm: add FTNANDC021 nand flash controller support
hw/arm: add FTI2C010 I2C controller support
hw: Add AudioCodecClass for wm87xx audio class abstration.
hw: add WM8731 audio codec support
The FTSSP010 is a multi-function synchronous serial port interface
controller which supports SSP, SPI, I2S, AC97 and SPDIF.
qemu/bitops.h: add the bit ordering reversal functions
hw/arm: add FTGMAC100 1Gbps ethernet support
hw/arm: add FTLCDC200 LCD controller support
hw/arm: add FTTSC010 touchscreen controller support
hw/arm: add FTSDC010 MMC/SD controller support
hw/arm: add FTMAC110 10/100Mbps ethernet support
hw/arm: add FTTMR010 timer support
hw/arm: add FTSPI020 SPI flash controller support
default-configs/arm-softmmu.mak | 1 +
hw/Makefile.objs | 2 +
hw/arm/Makefile.objs | 6 +
hw/arm/ftplat_a369.c | 180 ++++++++++
hw/arm/ftplat_a369kpd.c | 235 +++++++++++++
hw/arm/ftplat_a369scu.c | 186 ++++++++++
hw/arm/ftplat_a369soc.c | 294 ++++++++++++++++
hw/arm/spitz.c | 9 +-
hw/arm/z2.c | 9 +-
hw/audio.c | 81 +++++
hw/audio.h | 56 +++
hw/faraday.h | 133 ++++++++
hw/ftahbc020.c | 216 ++++++++++++
hw/ftapbbrg020.c | 478 ++++++++++++++++++++++++++
hw/ftapbbrg020.h | 44 +++
hw/ftddrii030.c | 192 +++++++++++
hw/ftdmac020.c | 599 ++++++++++++++++++++++++++++++++
hw/ftdmac020.h | 107 ++++++
hw/ftgmac100.c | 712 +++++++++++++++++++++++++++++++++++++++
hw/ftgmac100.h | 237 +++++++++++++
hw/fti2c010.c | 224 ++++++++++++
hw/fti2c010.h | 74 ++++
hw/ftintc020.c | 307 +++++++++++++++++
hw/ftintc020.h | 55 +++
hw/ftkbc010.h | 44 +++
hw/ftlcdc200.c | 516 ++++++++++++++++++++++++++++
hw/ftlcdc200.h | 110 ++++++
hw/ftlcdc200_template.h | 439 ++++++++++++++++++++++++
hw/ftmac110.c | 665 ++++++++++++++++++++++++++++++++++++
hw/ftmac110.h | 166 +++++++++
hw/ftnandc021.c | 526 +++++++++++++++++++++++++++++
hw/ftnandc021.h | 84 +++++
hw/ftpwmtmr010.c | 261 ++++++++++++++
hw/ftpwmtmr010.h | 31 ++
hw/ftrtc011.c | 387 +++++++++++++++++++++
hw/ftrtc011.h | 53 +++
hw/ftsdc010.c | 359 ++++++++++++++++++++
hw/ftsdc010.h | 88 +++++
hw/ftspi020.c | 341 +++++++++++++++++++
hw/ftspi020.h | 81 +++++
hw/ftssp010.c | 504 +++++++++++++++++++++++++++
hw/ftssp010.h | 96 ++++++
hw/fttmr010.c | 449 ++++++++++++++++++++++++
hw/fttmr010.h | 39 +++
hw/fttsc010.c | 264 +++++++++++++++
hw/fttsc010.h | 39 +++
hw/ftwdt010.c | 213 ++++++++++++
hw/ftwdt010.h | 35 ++
hw/i2c.h | 9 -
hw/marvell_88w8618_audio.c | 23 +-
hw/wm8731.c | 505 +++++++++++++++++++++++++++
hw/wm8750.c | 91 ++---
include/qemu/bitops.h | 59 +++-
target-arm/cpu.c | 52 +++
target-arm/cpu.h | 6 +-
target-arm/helper.c | 84 +++++
target-arm/machine.c | 4 +
tests/Makefile | 3 +
tests/ftrtc011-test.c | 410 ++++++++++++++++++++++
59 files changed, 11403 insertions(+), 70 deletions(-)
create mode 100644 hw/arm/ftplat_a369.c
create mode 100644 hw/arm/ftplat_a369kpd.c
create mode 100644 hw/arm/ftplat_a369scu.c
create mode 100644 hw/arm/ftplat_a369soc.c
create mode 100644 hw/audio.c
create mode 100644 hw/audio.h
create mode 100644 hw/faraday.h
create mode 100644 hw/ftahbc020.c
create mode 100644 hw/ftapbbrg020.c
create mode 100644 hw/ftapbbrg020.h
create mode 100644 hw/ftddrii030.c
create mode 100644 hw/ftdmac020.c
create mode 100644 hw/ftdmac020.h
create mode 100644 hw/ftgmac100.c
create mode 100644 hw/ftgmac100.h
create mode 100644 hw/fti2c010.c
create mode 100644 hw/fti2c010.h
create mode 100644 hw/ftintc020.c
create mode 100644 hw/ftintc020.h
create mode 100644 hw/ftkbc010.h
create mode 100644 hw/ftlcdc200.c
create mode 100644 hw/ftlcdc200.h
create mode 100644 hw/ftlcdc200_template.h
create mode 100644 hw/ftmac110.c
create mode 100644 hw/ftmac110.h
create mode 100644 hw/ftnandc021.c
create mode 100644 hw/ftnandc021.h
create mode 100644 hw/ftpwmtmr010.c
create mode 100644 hw/ftpwmtmr010.h
create mode 100644 hw/ftrtc011.c
create mode 100644 hw/ftrtc011.h
create mode 100644 hw/ftsdc010.c
create mode 100644 hw/ftsdc010.h
create mode 100644 hw/ftspi020.c
create mode 100644 hw/ftspi020.h
create mode 100644 hw/ftssp010.c
create mode 100644 hw/ftssp010.h
create mode 100644 hw/fttmr010.c
create mode 100644 hw/fttmr010.h
create mode 100644 hw/fttsc010.c
create mode 100644 hw/fttsc010.h
create mode 100644 hw/ftwdt010.c
create mode 100644 hw/ftwdt010.h
create mode 100644 hw/wm8731.c
create mode 100644 tests/ftrtc011-test.c
--
1.7.9.5
- [Qemu-devel] [PATCH v9 00/24] hw/arm: add Faraday A369 SoC platform support,
Kuo-Jung Su <=
[Qemu-devel] [PATCH v9 02/24] hw/arm: add Faraday a369 SoC platform support, Kuo-Jung Su, 2013/03/25
[Qemu-devel] [PATCH v9 06/24] hw/arm: add FTPWMTMR010 timer support, Kuo-Jung Su, 2013/03/25