qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v8 00/24] hw/arm: add Faraday A369 SoC platform supp


From: Kuo-Jung Su
Subject: [Qemu-devel] [PATCH v8 00/24] hw/arm: add Faraday A369 SoC platform support
Date: Fri, 15 Mar 2013 21:15:12 +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 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
  hw/arm: add FTSSP010 multi-function controller support
  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            |   21 ++
 hw/arm/faraday.h                |   61 ++++
 hw/arm/faraday_a369.c           |  174 ++++++++++
 hw/arm/faraday_a369_kpd.c       |  231 +++++++++++++
 hw/arm/faraday_a369_scu.c       |  182 ++++++++++
 hw/arm/faraday_a369_soc.c       |  342 +++++++++++++++++++
 hw/arm/ftahbc020.c              |  202 +++++++++++
 hw/arm/ftapbbrg020.c            |  468 ++++++++++++++++++++++++++
 hw/arm/ftapbbrg020.h            |   44 +++
 hw/arm/ftddrii030.c             |  183 ++++++++++
 hw/arm/ftdmac020.c              |  595 ++++++++++++++++++++++++++++++++
 hw/arm/ftdmac020.h              |  107 ++++++
 hw/arm/ftgmac100.c              |  708 +++++++++++++++++++++++++++++++++++++++
 hw/arm/ftgmac100.h              |  239 +++++++++++++
 hw/arm/fti2c010.c               |  212 ++++++++++++
 hw/arm/fti2c010.h               |   71 ++++
 hw/arm/ftintc020.c              |  302 +++++++++++++++++
 hw/arm/ftintc020.h              |   57 ++++
 hw/arm/ftkbc010.h               |   44 +++
 hw/arm/ftlcdc200.c              |  510 ++++++++++++++++++++++++++++
 hw/arm/ftlcdc200.h              |  112 +++++++
 hw/arm/ftlcdc200_template.h     |  439 ++++++++++++++++++++++++
 hw/arm/ftmac110.c               |  661 ++++++++++++++++++++++++++++++++++++
 hw/arm/ftmac110.h               |  168 ++++++++++
 hw/arm/ftnandc021.c             |  516 ++++++++++++++++++++++++++++
 hw/arm/ftnandc021.h             |   84 +++++
 hw/arm/ftpwmtmr010.c            |  258 ++++++++++++++
 hw/arm/ftpwmtmr010.h            |   31 ++
 hw/arm/ftrtc011.c               |  383 +++++++++++++++++++++
 hw/arm/ftrtc011.h               |   53 +++
 hw/arm/ftsdc010.c               |  354 ++++++++++++++++++++
 hw/arm/ftsdc010.h               |   90 +++++
 hw/arm/ftspi020.c               |  337 +++++++++++++++++++
 hw/arm/ftspi020.h               |   81 +++++
 hw/arm/ftssp010.c               |  494 +++++++++++++++++++++++++++
 hw/arm/ftssp010.h               |   98 ++++++
 hw/arm/fttmr010.c               |  445 ++++++++++++++++++++++++
 hw/arm/fttmr010.h               |   41 +++
 hw/arm/fttsc010.c               |  260 ++++++++++++++
 hw/arm/fttsc010.h               |   39 +++
 hw/arm/ftwdt010.c               |  209 ++++++++++++
 hw/arm/ftwdt010.h               |   35 ++
 hw/arm/spitz.c                  |    9 +-
 hw/arm/z2.c                     |    9 +-
 hw/audio_codec.c                |   81 +++++
 hw/audio_codec.h                |   56 ++++
 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, 11275 insertions(+), 70 deletions(-)
 create mode 100644 hw/arm/faraday.h
 create mode 100644 hw/arm/faraday_a369.c
 create mode 100644 hw/arm/faraday_a369_kpd.c
 create mode 100644 hw/arm/faraday_a369_scu.c
 create mode 100644 hw/arm/faraday_a369_soc.c
 create mode 100644 hw/arm/ftahbc020.c
 create mode 100644 hw/arm/ftapbbrg020.c
 create mode 100644 hw/arm/ftapbbrg020.h
 create mode 100644 hw/arm/ftddrii030.c
 create mode 100644 hw/arm/ftdmac020.c
 create mode 100644 hw/arm/ftdmac020.h
 create mode 100644 hw/arm/ftgmac100.c
 create mode 100644 hw/arm/ftgmac100.h
 create mode 100644 hw/arm/fti2c010.c
 create mode 100644 hw/arm/fti2c010.h
 create mode 100644 hw/arm/ftintc020.c
 create mode 100644 hw/arm/ftintc020.h
 create mode 100644 hw/arm/ftkbc010.h
 create mode 100644 hw/arm/ftlcdc200.c
 create mode 100644 hw/arm/ftlcdc200.h
 create mode 100644 hw/arm/ftlcdc200_template.h
 create mode 100644 hw/arm/ftmac110.c
 create mode 100644 hw/arm/ftmac110.h
 create mode 100644 hw/arm/ftnandc021.c
 create mode 100644 hw/arm/ftnandc021.h
 create mode 100644 hw/arm/ftpwmtmr010.c
 create mode 100644 hw/arm/ftpwmtmr010.h
 create mode 100644 hw/arm/ftrtc011.c
 create mode 100644 hw/arm/ftrtc011.h
 create mode 100644 hw/arm/ftsdc010.c
 create mode 100644 hw/arm/ftsdc010.h
 create mode 100644 hw/arm/ftspi020.c
 create mode 100644 hw/arm/ftspi020.h
 create mode 100644 hw/arm/ftssp010.c
 create mode 100644 hw/arm/ftssp010.h
 create mode 100644 hw/arm/fttmr010.c
 create mode 100644 hw/arm/fttmr010.h
 create mode 100644 hw/arm/fttsc010.c
 create mode 100644 hw/arm/fttsc010.h
 create mode 100644 hw/arm/ftwdt010.c
 create mode 100644 hw/arm/ftwdt010.h
 create mode 100644 hw/audio_codec.c
 create mode 100644 hw/audio_codec.h
 create mode 100644 hw/wm8731.c
 create mode 100644 tests/ftrtc011-test.c

-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]