PAPR guests advertise their capabilities to the platform by passing an ibm,architecture-vec structure via an ibm,client-architecture-support hcall as described by LoPAPR v11, B.6.2.3. during early boot. Using this information, the platform enables the capabilities it supports, then encodes a subset of those enabled capabilities (the 5th option vector of the ibm,architecture-vec structure passed to ibm,client-architecture-support) into the guest device tree via "/chosen/ibm,architecture-vec-5". The logical format of these these option vectors is a bit-vector, where individual bits are addressed/documented based on the byte-wise offset from the beginning of the bit-vector, followed by the bit-wise index starting from the byte-wise offset. Thus the bits of each of these bytes are stored in reverse order. Additionally, the first byte of each option vector is encodes the length of the option vector, so byte offsets begin at 1, and bit offset at 0. This is not very intuitive for the purposes of mapping these bits to a particular documented capability, so this patch introduces a set of abstractions that encapsulate the work of parsing/encoding these options vectors and testing for individual capabilities. Cc: Bharata B Rao <bharata@linux.vnet.ibm.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> [dwg: Tweaked double-include protection to not trigger a checkpatch false positive] Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
28 lines
988 B
Makefile
28 lines
988 B
Makefile
# shared objects
|
|
obj-y += ppc.o ppc_booke.o fdt.o
|
|
# IBM pSeries (sPAPR)
|
|
obj-$(CONFIG_PSERIES) += spapr.o spapr_vio.o spapr_events.o
|
|
obj-$(CONFIG_PSERIES) += spapr_hcall.o spapr_iommu.o spapr_rtas.o
|
|
obj-$(CONFIG_PSERIES) += spapr_pci.o spapr_rtc.o spapr_drc.o spapr_rng.o
|
|
obj-$(CONFIG_PSERIES) += spapr_cpu_core.o spapr_ovec.o
|
|
# IBM PowerNV
|
|
obj-$(CONFIG_POWERNV) += pnv.o pnv_xscom.o pnv_core.o pnv_lpc.o
|
|
ifeq ($(CONFIG_PCI)$(CONFIG_PSERIES)$(CONFIG_LINUX), yyy)
|
|
obj-y += spapr_pci_vfio.o
|
|
endif
|
|
obj-$(CONFIG_PSERIES) += spapr_rtas_ddw.o
|
|
# PowerPC 4xx boards
|
|
obj-y += ppc405_boards.o ppc4xx_devs.o ppc405_uc.o ppc440_bamboo.o
|
|
obj-y += ppc4xx_pci.o
|
|
# PReP
|
|
obj-$(CONFIG_PREP) += prep.o
|
|
# OldWorld PowerMac
|
|
obj-$(CONFIG_MAC) += mac_oldworld.o
|
|
# NewWorld PowerMac
|
|
obj-$(CONFIG_MAC) += mac_newworld.o
|
|
# e500
|
|
obj-$(CONFIG_E500) += e500.o mpc8544ds.o e500plat.o
|
|
obj-$(CONFIG_E500) += mpc8544_guts.o ppce500_spin.o
|
|
# PowerPC 440 Xilinx ML507 reference board.
|
|
obj-$(CONFIG_XILINX) += virtex_ml507.o
|