1. 26 4月, 2017 5 次提交
  2. 15 11月, 2016 2 次提交
  3. 28 10月, 2016 8 次提交
    • C
      ppc/pnv: add a ISA bus · 3495b6b6
      Cédric Le Goater 提交于
      As Qemu only supports a single instance of the ISA bus, we use the LPC
      controller of chip 0 to create one and plug in a couple of useful
      devices, like an UART and RTC. An IPMI BT device, which is also an ISA
      device, can be defined on the command line to connect an external BMC.
      That is for later.
      
      The PowerNV machine now has a console. Skiboot should load a kernel
      and jump into it but execution will stop quite early because we lack a
      model for the native XICS controller for the moment :
      
          [    0.000000] NR_IRQS:512 nr_irqs:512 16
          [    0.000000] XICS: Cannot find a Presentation Controller !
          [    0.000000] ------------[ cut here ]------------
          [    0.000000] WARNING: at arch/powerpc/platforms/powernv/setup.c:81
          ...
          [    0.000000] NIP [c00000000079d65c] pnv_init_IRQ+0x30/0x44
      
      You can still do a few things under xmon.
      
      Based on previous work from :
            Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      [dwg: Trivial fix for a change in the serial_hds_isa_init() interface]
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      3495b6b6
    • B
      ppc/pnv: add a LPC controller · a3980bf5
      Benjamin Herrenschmidt 提交于
      The LPC (Low Pin Count) interface on a POWER8 is made accessible to
      the system through the ADU (XSCOM interface). This interface is part
      of set of units connected together via a local OPB (On-Chip Peripheral
      Bus) which act as a bridge between the ADU and the off chip LPC
      endpoints, like external flash modules.
      
      The most important units of this OPB are :
       - OPB Master: contains the ADU slave logic, a set of internal
         registers and the logic to control the OPB.
       - LPCHC (LPC HOST Controller): which implements a OPB Slave, a set of
         internal registers and the LPC HOST Controller to control the LPC
         interface.
      
      Four address spaces are provided to the ADU :
       - LPC Bus Firmware Memory
       - LPC Bus Memory
       - LPC Bus I/O (ISA bus)
       - and the registers for the OPB Master and the LPC Host Controller
      
      On POWER8, an intermediate hop is necessary to reach the OPB, through
      a unit called the ECCB. OPB commands are simply mangled in ECCB write
      commands.
      
      On POWER9, the OPB master address space can be accessed via MMIO. The
      logic is same but the code will be simpler as the XSCOM and ECCB hops
      are not necessary anymore.
      
      This version of the LPC controller model doesn't yet implement support
      for the SerIRQ deserializer present in the Naples version of the chip
      though some preliminary work is there.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      [clg: - updated for qemu-2.7
            - ported on latest PowerNV patchset
            - changed the XSCOM interface to fit new model
            - QOMified the model
            - moved the ISA hunks in another patch
            - removed printf logging
            - added a couple of UNIMP logging
            - rewrote commit log ]
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      a3980bf5
    • C
      ppc/pnv: add XSCOM infrastructure · 967b7523
      Cédric Le Goater 提交于
      On a real POWER8 system, the Pervasive Interconnect Bus (PIB) serves
      as a backbone to connect different units of the system. The host
      firmware connects to the PIB through a bridge unit, the
      Alter-Display-Unit (ADU), which gives him access to all the chiplets
      on the PCB network (Pervasive Connect Bus), the PIB acting as the root
      of this network.
      
      XSCOM (serial communication) is the interface to the sideband bus
      provided by the POWER8 pervasive unit to read and write to chiplets
      resources. This is needed by the host firmware, OPAL and to a lesser
      extent, Linux. This is among others how the PCI Host bridges get
      configured at boot or how the LPC bus is accessed.
      
      To represent the ADU of a real system, we introduce a specific
      AddressSpace to dispatch XSCOM accesses to the targeted chiplets. The
      translation of an XSCOM address into a PCB register address is
      slightly different between the P9 and the P8. This is handled before
      the dispatch using a 8byte alignment for all.
      
      To customize the device tree, a QOM InterfaceClass, PnvXScomInterface,
      is provided with a populate() handler. The chip populates the device
      tree by simply looping on its children. Therefore, each model needing
      custom nodes should not forget to declare itself as a child at
      instantiation time.
      
      Based on previous work done by :
            Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      [dwg: Added cpu parameter to xscom_complete()]
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      967b7523
    • C
      ppc/pnv: add a PnvCore object · d2fd9612
      Cédric Le Goater 提交于
      This is largy inspired by sPAPRCPUCore with some simplification, no
      hotplug for instance. A set of PnvCore objects is added to the PnvChip
      and the device tree is populated looping on these cores.
      
      Real HW cpu ids are now generated depending on the chip cpu model, the
      chip id and a core mask. The id is propagated to the CPU object, using
      properties, to set the SPR_PIR (Processor Identification Register)
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      d2fd9612
    • C
      ppc/pnv: add a PIR handler to PnvChip · 631adaff
      Cédric Le Goater 提交于
      The Processor Identification Register (PIR) is a register that holds a
      processor identifier which is used for bus transactions (XSCOM) and
      for processor differentiation in multiprocessor systems. It also used
      in the interrupt vector entries (IVE) to identify the thread serving
      the interrupts.
      
      P9 and P8 have some differences in the CPU PIR encoding.
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      631adaff
    • C
      ppc/pnv: add a core mask to PnvChip · 397a79e7
      Cédric Le Goater 提交于
      This will be used to build real HW ids for the cores and enforce some
      limits on the available cores per chip.
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      397a79e7
    • C
      ppc/pnv: add a PnvChip object · e997040e
      Cédric Le Goater 提交于
      This is is an abstraction of a POWER8 chip which is a set of cores
      plus other 'units', like the pervasive unit, the interrupt controller,
      the memory controller, the on-chip microcontroller, etc. The whole can
      be seen as a socket. It depends on a cpu model and its characteristics:
      max cores and specific inits are defined in a PnvChipClass.
      
      We start with an near empty PnvChip with only a few cpu constants
      which we will grow in the subsequent patches with the controllers
      required to run the system.
      
      The Chip CFAM (Common FRU Access Module) ID gives the model of the
      chip and its version number. It is generally the first thing firmwares
      fetch, available at XSCOM PCB address 0xf000f, to start initialization.
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      e997040e
    • B
      ppc/pnv: add skeleton PowerNV platform · 9e933f4a
      Benjamin Herrenschmidt 提交于
      The goal is to emulate a PowerNV system at the level of the skiboot
      firmware, which loads the OS and provides some runtime services. Power
      Systems have a lower firmware (HostBoot) that does low level system
      initialization, like DRAM training. This is beyond the scope of what
      qemu will address in a PowerNV guest.
      
      No devices yet, not even an interrupt controller. Just to get started,
      some RAM to load the skiboot firmware, the kernel and initrd. The
      device tree is fully created in the machine reset op.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      [clg: - updated for qemu-2.7
            - replaced fprintf by error_report
            - used a common definition of _FDT macro
            - removed VMStateDescription as migration is not yet supported
            - added IBM Copyright statements
            - reworked kernel_filename handling
            - merged PnvSystem and sPowerNVMachineState
            - removed PHANDLE_XICP
            - added ppc_create_page_sizes_prop helper
            - removed nmi support
            - removed kvm support
            - updated powernv machine to version 2.8
            - removed chips and cpus, They will be provided in another patches
            - added a machine reset routine to initialize the device tree (also)
            - french has a squelette and english a skeleton.
            - improved commit log.
            - reworked prototypes parameters
            - added a check on the ram size (thanks to Michael Ellerman)
            - fixed chip-id cell
            - changed MAX_CPUS to 2048
            - simplified memory node creation to one node only
            - removed machine version
            - rewrote the device tree creation with the fdt "rw" routines
            - s/sPowerNVMachineState/PnvMachineState/
            - etc.]
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      9e933f4a
  4. 17 3月, 2016 1 次提交
  5. 29 1月, 2016 1 次提交
  6. 14 3月, 2014 2 次提交
  7. 28 7月, 2012 3 次提交
  8. 06 12月, 2009 1 次提交