# SPDX-License-Identifier: GPL-2.0
config PPC_PS3
	bool "Sony PS3"
	depends on PPC64 && PPC_BOOK3S && CPU_BIG_ENDIAN
	select PPC_CELL
	select USB_OHCI_LITTLE_ENDIAN
	select USB_OHCI_BIG_ENDIAN_MMIO
	select USB_EHCI_BIG_ENDIAN_MMIO
	select PPC_PCI_CHOICE
	help
	  This option enables support for the Sony PS3 game console
	  and other platforms using the PS3 hypervisor.  Enabling this
	  option will allow building otheros.bld, a kernel image suitable
	  for programming into flash memory, and vmlinux, a kernel image
	  suitable for loading via kexec.

menu "PS3 Platform Options"
	depends on PPC_PS3

config PS3_ADVANCED
	depends on PPC_PS3
	bool "PS3 Advanced configuration options"
	help
	  This gives you access to some advanced options for the PS3. The
	  defaults should be fine for most users, but these options may make
	  it possible to better control the kernel configuration if you know
	  what you are doing.

	  Note that the answer to this question won't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about these options.

	  Most users should say N to this question.

config PS3_HTAB_SIZE
	depends on PPC_PS3
	int "PS3 Platform pagetable size" if PS3_ADVANCED
	range 18 20
	default 20
	help
	  This option is only for experts who may have the desire to fine
	  tune the pagetable size on their system.  The value here is
	  expressed as the log2 of the page table size.  Valid values are
	  18, 19, and 20, corresponding to 256KB, 512KB and 1MB respectively.

	  If unsure, choose the default (20) with the confidence that your
	  system will have optimal runtime performance.

config PS3_DYNAMIC_DMA
	depends on PPC_PS3
	bool "PS3 Platform dynamic DMA page table management"
	default n
	help
	  This option will enable kernel support to take advantage of the
	  per device dynamic DMA page table management provided by the Cell
	  processor's IO Controller.  This support incurs some runtime
	  overhead and also slightly increases kernel memory usage.  The
	  current implementation should be considered experimental.

	  This support is mainly for Linux kernel development.  If unsure,
	  say N.

config PS3_VUART
	depends on PPC_PS3
	tristate

config PS3_PS3AV
	depends on PPC_PS3
	tristate "PS3 AV settings driver" if PS3_ADVANCED
	select PS3_VUART
	default y
	help
	  Include support for the PS3 AV Settings driver.

	  This support is required for PS3 graphics and sound. In
	  general, all users will say Y or M.

config PS3_SYS_MANAGER
	depends on PPC_PS3
	tristate "PS3 System Manager driver" if PS3_ADVANCED
	select PS3_VUART
	default y
	help
	  Include support for the PS3 System Manager.

	  This support is required for PS3 system control.  In
	  general, all users will say Y or M.

config PS3_REPOSITORY_WRITE
	bool "PS3 Repository write support" if PS3_ADVANCED
	depends on PPC_PS3
	default n
	help
	  Enables support for writing to the PS3 System Repository.

	  This support is intended for bootloaders that need to store data
	  in the repository for later boot stages.

	  If in doubt, say N here and reduce the size of the kernel by a
	  small amount.

config PS3_STORAGE
	depends on PPC_PS3
	tristate

config PS3_DISK
	tristate "PS3 Disk Storage Driver"
	depends on PPC_PS3 && BLOCK
	select PS3_STORAGE
	help
	  Include support for the PS3 Disk Storage.

	  This support is required to access the PS3 hard disk.
	  In general, all users will say Y or M.

config PS3_ROM
	tristate "PS3 BD/DVD/CD-ROM Storage Driver"
	depends on PPC_PS3 && SCSI
	select PS3_STORAGE
	help
	  Include support for the PS3 ROM Storage.

	  This support is required to access the PS3 BD/DVD/CD-ROM drive.
	  In general, all users will say Y or M.
	  Also make sure to say Y or M to "SCSI CDROM support" later.

config PS3_FLASH
	tristate "PS3 FLASH ROM Storage Driver"
	depends on PPC_PS3
	select PS3_STORAGE
	help
	  Include support for the PS3 FLASH ROM Storage.

	  This support is required to access the PS3 FLASH ROM, which
	  contains the boot loader and some boot options.
	  In general, PS3 OtherOS users will say Y or M.

	  As this driver needs a fixed buffer of 256 KiB of memory, it can
	  be disabled on the kernel command line using "ps3flash=off", to
	  not allocate this fixed buffer.

config PS3_VRAM
	tristate "PS3 Video RAM Storage Driver"
	depends on FB_PS3=y && BLOCK && m
	help
	  This driver allows you to use excess PS3 video RAM as volatile
	  storage or system swap.

config PS3_LPM
	tristate "PS3 Logical Performance Monitor support"
	depends on PPC_PS3
	help
	  Include support for the PS3 Logical Performance Monitor.

	  This support is required to use the logical performance monitor
	  of the PS3's LV1 hypervisor.

	  If you intend to use the advanced performance monitoring and
	  profiling support of the Cell processor with programs like
	  oprofile and perfmon2, then say Y or M, otherwise say N.

config PS3GELIC_UDBG
	bool "PS3 udbg output via UDP broadcasts on Ethernet"
	depends on PPC_PS3
	help
	  Enables udbg early debugging output by sending broadcast UDP
	  via the Ethernet port (UDP port number 18194).

	  This driver uses a trivial implementation and is independent
	  from the main PS3 gelic network driver.

	  If in doubt, say N here.

endmenu
