diff options
author | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-10-05 10:12:53 +0000 |
---|---|---|
committer | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-10-05 10:12:53 +0000 |
commit | 5c105d9f3fd086aff195d3849dcf847d6b0bd927 (patch) | |
tree | 1229a11f725bfa58aa7c57a76898553bb5f6654a /target/linux/ps3 | |
download | openwrt-5c105d9f3fd086aff195d3849dcf847d6b0bd927.tar.gz openwrt-5c105d9f3fd086aff195d3849dcf847d6b0bd927.zip |
branch Attitude Adjustment
git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@33625 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ps3')
18 files changed, 904 insertions, 0 deletions
diff --git a/target/linux/ps3/Makefile b/target/linux/ps3/Makefile new file mode 100644 index 000000000..01b298975 --- /dev/null +++ b/target/linux/ps3/Makefile @@ -0,0 +1,35 @@ +# +# Copyright (C) 2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +include $(TOPDIR)/rules.mk + +ARCH:=powerpc +BOARD:=ps3 +BOARDNAME:=Sony PS3 Game Console +MAINTAINER:=Geoff Levand <geoffrey.levand@am.sony.com> +SUBTARGETS=petitboot +FEATURES:=powerpc64 broken + +LINUX_VERSION:=2.6.30.10 + +KERNEL_CC:= + +include $(INCLUDE_DIR)/target.mk + +define Target/Description + Build for the Sony PS3 Game Console + + The OpenWRT build will create both a 1st stage PS3-Linux image + suitable for programming into the PS3 flash memory, and a 2nd + stage PS3-Linux image suitable for loading via bootloaders or + the kexec utility. + + Enable the Petitboot package to build a PS3 bootloader. +endef + +KERNELNAME:="zImage" + +$(eval $(call BuildTarget)) diff --git a/target/linux/ps3/README b/target/linux/ps3/README new file mode 100644 index 000000000..2d08b8c25 --- /dev/null +++ b/target/linux/ps3/README @@ -0,0 +1,43 @@ +OpenWRT on the Sony PS3 Game Console + +The OpenWRT build will create both a 1st stage PS3-Linux image +suitable for programming into the PS3 flash memory, and a 2nd +stage PS3-Linux image suitable for loading via bootloaders or +the kexec utility. + +The 2nd stage image is convenient for testing new builds. It can +be loaded from disk, USB device, or the network by an existing +Other OS bootloader. After the 2nd stage image is tested and +found to be good, the 1st stage image can then be programmed into +flash memory. It is recommended to use this method during +development to avoid corrupting the flash memory contents, which +requires a reboot to the Game OS to repair. + +Known good Other OS bootloader images and installation information +can be found here: + + http://www.kernel.org/pub/linux/kernel/people/geoff/cell/ + +The 2nd stage image file is bin/openwrt-ps3-vmlinux.elf. It can +be loaded with an entry in the bootloader config file. It has +no initrd file. + +The 1st stage image is named bin/otheros.bld. It can be programmed +into flash memory either from Linux or the Game OS. From Linux, +use the command: + + ps3-flash-util -w otheros.bld + +From the Game OS, use the menu item 'Install Other OS'. + +Tips on how to recover your PS3-Linux system when it hangs up or no +longer boots can be found here: + + http://www.kernel.org/pub/linux/kernel/people/geoff/cell/ps3-howto/ps3-boot-recovery-howto.txt + +To alter the kernel command line options, run 'make kernel_menuconfig' +and go to 'Kernel Options' -> 'Initial kernel command string'. + +The default video behavior is to autodetect the monitor capabilities, +which should work for most monitors. More info on video modes can be +found in the man page of the ps3-video-mode utility. diff --git a/target/linux/ps3/config-2.6.30 b/target/linux/ps3/config-2.6.30 new file mode 100644 index 000000000..0d7af3746 --- /dev/null +++ b/target/linux/ps3/config-2.6.30 @@ -0,0 +1,321 @@ +CONFIG_64BIT=y +CONFIG_ALTIVEC=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_HAS_ILOG2_U32=y +CONFIG_ARCH_HAS_ILOG2_U64=y +CONFIG_ARCH_HAS_WALK_MEMORY=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_ARCH_NO_VIRT_TO_BUS=y +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_ARPD is not set +CONFIG_AUDIT_ARCH=y +# CONFIG_BINARY_PRINTF is not set +CONFIG_BITREVERSE=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65535 +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_SD=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SR=y +CONFIG_BLOCK_COMPAT=y +# CONFIG_BOOTX_TEXT is not set +CONFIG_BOUNCE=y +# CONFIG_BRIDGE is not set +# CONFIG_CGROUP_SCHED is not set +CONFIG_CMDLINE="" +CONFIG_CMDLINE_BOOL=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_COMPAT_BRK=y +CONFIG_COMPAT=y +CONFIG_CONSOLE_TRANSLATIONS=y +# CONFIG_CRYPTO is not set +# CONFIG_DEFAULT_UIMAGE is not set +CONFIG_DEVKMEM=y +CONFIG_DNOTIFY=y +CONFIG_DTC=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_EARLY_PRINTK=y +CONFIG_ELF_CORE=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT4DEV_COMPAT is not set +# CONFIG_EXT4_FS_XATTR is not set +CONFIG_EXT4_FS=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAT_FS=y +CONFIG_FB_PS3_DEFAULT_SIZE_M=9 +CONFIG_FB_PS3=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_FOPS=y +CONFIG_FB_SYS_IMAGEBLIT=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y +# CONFIG_FONTS is not set +CONFIG_FORCE_MAX_ZONEORDER=13 +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAME_WARN=2048 +# CONFIG_FSL_ULI1575 is not set +CONFIG_GELIC_NET=y +# CONFIG_GELIC_WIRELESS is not set +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +# CONFIG_GENERIC_IOMAP is not set +CONFIG_GENERIC_ISA_DMA=y +# CONFIG_GENERIC_TBSYNC is not set +CONFIG_GENERIC_TIME_VSYSCALL=y +# CONFIG_GEN_RTC is not set +CONFIG_GROUP_SCHED=y +# CONFIG_HAMRADIO is not set +# CONFIG_HANGCHECK_TIMER is not set +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +# CONFIG_HAS_RAPIDIO is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HAVE_IDE=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_HAVE_LMB=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HAVE_SYSCALL_WRAPPERS=y +CONFIG_HID_APPLE=y +CONFIG_HID_BELKIN=y +CONFIG_HID_CHERRY=y +CONFIG_HID_EZKEY=y +CONFIG_HID_LOGITECH=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_SONY=y +CONFIG_HID_SUNPLUS=y +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HIGH_RES_TIMERS is not set +# CONFIG_HUGETLBFS is not set +CONFIG_HW_CONSOLE=y +# CONFIG_HW_RANDOM is not set +# CONFIG_HZ_100 is not set +CONFIG_HZ=250 +CONFIG_HZ_250=y +CONFIG_INITRAMFS_ROOT_GID=500 +CONFIG_INITRAMFS_ROOT_UID=500 +CONFIG_INOTIFY_USER=y +CONFIG_INOTIFY=y +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT=y +# CONFIG_INPUT_YEALINK is not set +CONFIG_IOMMU_HELPER=y +# CONFIG_IOMMU_VMERGE is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IPIC is not set +# CONFIG_IP_MULTICAST is not set +# CONFIG_IRQ_ALL_CPUS is not set +CONFIG_IRQ_PER_CPU=y +# CONFIG_IRQSTACKS is not set +CONFIG_ISA_DMA_API=y +CONFIG_ISO9660_FS=y +CONFIG_JBD2=y +CONFIG_JBD=y +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_XPAD is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +CONFIG_KERNEL_START=0xc000000000000000 +CONFIG_KEXEC=y +# CONFIG_LEDS_TRIGGERS is not set +CONFIG_LOCK_KERNEL=y +CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_LOGO is not set +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTPLUG=y +# CONFIG_MEMORY_HOTREMOVE is not set +CONFIG_MIGRATION=y +# CONFIG_MINI_FO is not set +# CONFIG_MISC_DEVICES is not set +# CONFIG_MMIO_NVRAM is not set +# CONFIG_MPIC is not set +# CONFIG_MPIC_WEIRD is not set +CONFIG_MSDOS_FS=y +# CONFIG_MTD is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETFILTER is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS=y +CONFIG_NR_CPUS=2 +# CONFIG_NUMA is not set +CONFIG_OF_DEVICE=y +CONFIG_OF=y +# CONFIG_PACKET_MMAP is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_PAGE_OFFSET=0xc000000000000000 +# CONFIG_PARTITION_ADVANCED is not set +# CONFIG_PCI_DOMAINS is not set +# CONFIG_PCI_SYSCALL is not set +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_PHYSICAL_START=0x00000000 +CONFIG_POWER3=y +# CONFIG_POWER4_ONLY is not set +CONFIG_POWER4=y +CONFIG_PPC64=y +# CONFIG_PPC_970_NAP is not set +CONFIG_PPC_BOOK3S=y +# CONFIG_PPC_CELLEB is not set +# CONFIG_PPC_CELL_NATIVE is not set +# CONFIG_PPC_CELL_QPACE is not set +CONFIG_PPC_CELL=y +# CONFIG_PPC_CLOCK is not set +# CONFIG_PPC_DCR_MMIO is not set +# CONFIG_PPC_DCR_NATIVE is not set +# CONFIG_PPC_EARLY_DEBUG is not set +CONFIG_PPC_FPU=y +# CONFIG_PPC_HAS_HASH_64K is not set +# CONFIG_PPC_I8259 is not set +# CONFIG_PPC_IBM_CELL_BLADE is not set +# CONFIG_PPC_INDIRECT_IO is not set +# CONFIG_PPC_ISERIES is not set +# CONFIG_PPC_MAPLE is not set +# CONFIG_PPC_MM_SLICES is not set +# CONFIG_PPC_MPC106 is not set +# CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set +CONFIG_PPC_OF=y +# CONFIG_PPC_PASEMI is not set +CONFIG_PPC_PCI_CHOICE=y +# CONFIG_PPC_PMAC is not set +CONFIG_PPC_PS3=y +# CONFIG_PPC_PSERIES is not set +# CONFIG_PPC_RTAS is not set +CONFIG_PPC_STD_MMU_64=y +CONFIG_PPC_STD_MMU=y +# CONFIG_PPC_UDBG_16550 is not set +CONFIG_PPC=y +# CONFIG_PQ2ADS is not set +CONFIG_PRINT_STACK_DEPTH=64 +CONFIG_PROC_DEVICETREE=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PS3_ADVANCED=y +CONFIG_PS3_DISK=y +# CONFIG_PS3_DYNAMIC_DMA is not set +CONFIG_PS3_FLASH=y +CONFIG_PS3_HTAB_SIZE=20 +# CONFIG_PS3_LPM is not set +CONFIG_PS3_PS3AV=y +CONFIG_PS3_ROM=y +CONFIG_PS3_STORAGE=y +CONFIG_PS3_SYS_MANAGER=y +# CONFIG_PS3_VRAM is not set +CONFIG_PS3_VUART=y +# CONFIG_RD_LZMA is not set +# CONFIG_RELOCATABLE is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +# CONFIG_SCHED_HRTICK is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +# CONFIG_SCHED_SMT is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_PROC_FS is not set +CONFIG_SCSI=y +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_OF_PLATFORM is not set +# CONFIG_SLOW_WORK is not set +CONFIG_SMP=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +# CONFIG_SPARSEMEM_VMEMMAP is not set +CONFIG_SPARSEMEM=y +# CONFIG_SPU_BASE is not set +# CONFIG_SPU_FS is not set +# CONFIG_SQUASHFS is not set +CONFIG_STOP_MACHINE=y +# CONFIG_SWAP is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_SYSVIPC_COMPAT=y +# CONFIG_TEXTSEARCH is not set +CONFIG_TRACING_SUPPORT=y +CONFIG_TUNE_CELL=y +# CONFIG_U3_DART is not set +# CONFIG_USB_DEVICEFS is not set +CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y +CONFIG_USB_EHCI_HCD_PPC_OF=y +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_HID=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y +# CONFIG_USB_OHCI_HCD_PPC_OF is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_SUPPORT=y +CONFIG_USB=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_USER_SCHED=y +CONFIG_VFAT_FS=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_VIRT_CPU_ACCOUNTING=y +# CONFIG_VLAN_8021Q is not set +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_VSX is not set +CONFIG_VT_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_VT=y +# CONFIG_WATCHDOG is not set +# CONFIG_WIRELESS is not set +# CONFIG_WLAN_80211 is not set +CONFIG_WORD_SIZE=64 +# CONFIG_ZISOFS is not set diff --git a/target/linux/ps3/image/Makefile b/target/linux/ps3/image/Makefile new file mode 100644 index 000000000..9eb3d93f0 --- /dev/null +++ b/target/linux/ps3/image/Makefile @@ -0,0 +1,21 @@ +# +# Copyright (C) 2007-2010 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/image.mk + +define Image/Prepare + cp $(LINUX_DIR)/arch/powerpc/boot/otheros.bld $(KDIR)/image +endef + +define Image/BuildKernel + mkdir -p $(BIN_DIR) + cp $(KDIR)/image $(BIN_DIR)/otheros.bld + cp $(KDIR)/vmlinux.elf $(BIN_DIR)/$(IMG_PREFIX)-vmlinux.elf + cp $(BIN_DIR)/$(IMG_PREFIX)-vmlinux.elf $(TARGET_DIR) +endef + +$(eval $(call BuildImage)) diff --git a/target/linux/ps3/modules.mk b/target/linux/ps3/modules.mk new file mode 100644 index 000000000..51638181a --- /dev/null +++ b/target/linux/ps3/modules.mk @@ -0,0 +1,58 @@ +# +# Copyright (C) 2010 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +define KernelPackage/ps3lan + SUBMENU:=Network Devices + TITLE:=PS3-Lan support + DEPENDS:=@TARGET_ps3 + KCONFIG:= \ + CONFIG_GELIC_NET \ + CONFIG_GELIC_WIRELESS=y + FILES:=$(LINUX_DIR)/drivers/net/ps3_gelic.ko + AUTOLOAD:=$(call AutoLoad,50,ps3_gelic) +endef + +define KernelPackage/ps3lan/description + Kernel module for PS3 Networking. Includes Gb Ethernet and WLAN +endef + +$(eval $(call KernelPackage,ps3lan)) + + +define KernelPackage/ps3vram + SUBMENU:=$(BLOCK_MENU) + TITLE:=PS3 Video RAM Storage Driver + DEPENDS:=@TARGET_ps3 + KCONFIG:=CONFIG_PS3_VRAM + FILES:=$(LINUX_DIR)/drivers/block/ps3vram.ko + AUTOLOAD:=$(call AutoLoad,01,ps3vram) +endef + +define KernelPackage/ps3vram/description + Kernel support for PS3 Video RAM Storage +endef + +$(eval $(call KernelPackage,ps3vram)) + + +define KernelPackage/sound-ps3 + SUBMENU:=$(SOUND_MENU) + TITLE:=PS3 Audio + DEPENDS:=@TARGET_ps3 + KCONFIG:=CONFIG_SND_PS3 \ + CONFIG_SND_PPC=y \ + CONFIG_SND_PS3_DEFAULT_START_DELAY=2000 + FILES:=$(LINUX_DIR)/sound/ppc/snd_ps3.ko + AUTOLOAD:=$(call AutoLoad,35, snd_ps3) + $(call AddDepends/sound) +endef + +define KernelPackage/sound-ps3/description + support for the integrated PS3 audio device +endef + +$(eval $(call KernelPackage,sound-ps3)) diff --git a/target/linux/ps3/patches-2.6.30/0016-ps3-gelic-fix-rxdmac.patch b/target/linux/ps3/patches-2.6.30/0016-ps3-gelic-fix-rxdmac.patch new file mode 100644 index 000000000..1cb202d4f --- /dev/null +++ b/target/linux/ps3/patches-2.6.30/0016-ps3-gelic-fix-rxdmac.patch @@ -0,0 +1,89 @@ +Subject: net/ps3_gelic: Fix RX DMA restart + +Fix the condition where PS3 network RX hangs when no network +TX is occuring by calling gelic_card_enable_rxdmac() during +RX_DMA_CHAIN_END event processing. + +The gelic hardware automatically clears its RX_DMA_EN flag when +it detects an RX_DMA_CHAIN_END event. In its processing of +RX_DMA_CHAIN_END the gelic driver is required to set RX_DMA_EN +(with a call to gelic_card_enable_rxdmac()) to restart RX DMA +transfers. The existing gelic driver code does not set +RX_DMA_EN directly in its processing of the RX_DMA_CHAIN_END +event, but uses a flag variable card->rx_dma_restart_required +to schedule the setting of RX_DMA_EN until next inside the +interrupt handler. + +It seems this delayed setting of RX_DMA_EN causes the hang since +the next RX interrupt after the RX_DMA_CHAIN_END event where +RX_DMA_EN is scheduled to be set will not occur since RX_DMA_EN +was not set. In the case were network TX is occuring, RX_DMA_EN +is set in the next TX interrupt and RX processing continues. + +Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com> +--- + drivers/net/ps3_gelic_net.c | 21 ++++++++------------- + drivers/net/ps3_gelic_net.h | 1 - + 2 files changed, 8 insertions(+), 14 deletions(-) + +--- a/drivers/net/ps3_gelic_net.c ++++ b/drivers/net/ps3_gelic_net.c +@@ -969,10 +969,6 @@ static int gelic_card_decode_one_descr(s + int dmac_chain_ended; + + status = gelic_descr_get_status(descr); +- /* is this descriptor terminated with next_descr == NULL? */ +- dmac_chain_ended = +- be32_to_cpu(descr->dmac_cmd_status) & +- GELIC_DESCR_RX_DMA_CHAIN_END; + + if (status == GELIC_DESCR_DMA_CARDOWNED) + return 0; +@@ -1035,6 +1031,11 @@ static int gelic_card_decode_one_descr(s + /* ok, we've got a packet in descr */ + gelic_net_pass_skb_up(descr, card, netdev); + refill: ++ ++ /* is the current descriptor terminated with next_descr == NULL? */ ++ dmac_chain_ended = ++ be32_to_cpu(descr->dmac_cmd_status) & ++ GELIC_DESCR_RX_DMA_CHAIN_END; + /* + * So that always DMAC can see the end + * of the descriptor chain to avoid +@@ -1063,10 +1064,9 @@ refill: + * If dmac chain was met, DMAC stopped. + * thus re-enable it + */ +- if (dmac_chain_ended) { +- card->rx_dma_restart_required = 1; +- dev_dbg(ctodev(card), "reenable rx dma scheduled\n"); +- } ++ ++ if (dmac_chain_ended) ++ gelic_card_enable_rxdmac(card); + + return 1; + } +@@ -1132,11 +1132,6 @@ static irqreturn_t gelic_card_interrupt( + + status &= card->irq_mask; + +- if (card->rx_dma_restart_required) { +- card->rx_dma_restart_required = 0; +- gelic_card_enable_rxdmac(card); +- } +- + if (status & GELIC_CARD_RXINT) { + gelic_card_rx_irq_off(card); + napi_schedule(&card->napi); +--- a/drivers/net/ps3_gelic_net.h ++++ b/drivers/net/ps3_gelic_net.h +@@ -284,7 +284,6 @@ struct gelic_card { + + struct gelic_descr_chain tx_chain; + struct gelic_descr_chain rx_chain; +- int rx_dma_restart_required; + int rx_csum; + /* + * tx_lock guards tx descriptor list and diff --git a/target/linux/ps3/petitboot/base-files/bin/login b/target/linux/ps3/petitboot/base-files/bin/login new file mode 100755 index 000000000..b17efcdf4 --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/bin/login @@ -0,0 +1,45 @@ +#!/bin/sh +# Copyright (C) 2008 OpenWrt.org + +bl_option=/sbin/ps3-bl-option + +if [ ! -f $bl_option ] || + [ ! `$bl_option --get-telnet-enabled` ] || + [ `$bl_option --get-telnet-enabled` = "0" ]; then + echo \ +" + === IMPORTANT ========================== + Telnet login is disabled for security + reasons. Enabling telnet login on the + host will allow any user connected to + the same network to login to the host. + + You can enable telnet login with the + following command in the host console: + + # $bl_option -T 1 + + You can disable telnet login with the + following command in the host console: + + # $bl_option -T 0 + ---------------------------------------- +" + exit 0 +fi + +grep '^root:[^!]' /etc/passwd >&- 2>&- +[ "$?" = "0" -a -z "$FAILSAFE" ] && +{ + echo "Login failed." + exit 0 +} || { +cat << EOF + === IMPORTANT ============================ + Use 'passwd' to set your login password + this will disable telnet and enable SSH + ------------------------------------------ +EOF +} + +exec /bin/ash --login diff --git a/target/linux/ps3/petitboot/base-files/etc/banner b/target/linux/ps3/petitboot/base-files/etc/banner new file mode 100644 index 000000000..4d671c7ba --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/etc/banner @@ -0,0 +1,6 @@ + _____ _____ _____ + | _ || ___||___ | + | __||___ ||___ | + |__| |_____||_____| + L I N U X + diff --git a/target/linux/ps3/petitboot/base-files/etc/config/network b/target/linux/ps3/petitboot/base-files/etc/config/network new file mode 100644 index 000000000..3c1805fb9 --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/etc/config/network @@ -0,0 +1,11 @@ +# Copyright (C) 2006-2012 OpenWrt.org + +config interface loopback + option ifname lo + option proto static + option ipaddr 127.0.0.1 + option netmask 255.0.0.0 + +config interface lan + option ifname eth0 + option proto dhcp diff --git a/target/linux/ps3/petitboot/base-files/etc/config/system b/target/linux/ps3/petitboot/base-files/etc/config/system new file mode 100644 index 000000000..67ffe8319 --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/etc/config/system @@ -0,0 +1,3 @@ +config system + option hostname ps3-linux + option log_file /var/log/messages diff --git a/target/linux/ps3/petitboot/base-files/etc/init.d/boot b/target/linux/ps3/petitboot/base-files/etc/init.d/boot new file mode 100755 index 000000000..c84c6873d --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/etc/init.d/boot @@ -0,0 +1,73 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +START=10 + +system_config() { + local cfg="$1" + local hostname + + config_get hostname "$cfg" hostname + echo "${hostname:-OpenWrt}" > /proc/sys/kernel/hostname + + config_get conloglevel "$cfg" conloglevel + [ -n "$conloglevel" ] && dmesg -n "$conloglevel" + + config_get timezone "$cfg" timezone + [ -z "$timezone" ] && timezone=UTC + echo "$timezone" > /tmp/TZ + + config_get log_ip "$cfg" log_ip + config_get log_size "$cfg" log_size + config_get log_port "$cfg" log_port + config_get log_file "$cfg" log_file + + [ -z $log_file -a -z "$log_size" ] && log_size=16 + [ -x /sbin/syslogd ] && syslogd ${log_size:+-C $log_size} \ + ${log_file:+-O $log_file} ${log_ip:+-L -R $log_ip} + [ -x /sbin/klogd ] && klogd +} + +apply_uci_config() {( + include /lib/config + uci_apply_defaults +)} + +start() { + [ -f /proc/mounts ] || /sbin/mount_root + [ -f /proc/jffs2_bbc ] && echo "S" > /proc/jffs2_bbc + [ -f /proc/net/vlan/config ] && vconfig set_name_type DEV_PLUS_VID_NO_PAD + + apply_uci_config + config_load system + config_foreach system_config system + + mkdir -p /var/run + mkdir -p /var/log + mkdir -p /var/lock + mkdir -p /var/state + mkdir -p /tmp/.uci + chown 0700 /tmp/.uci + touch /var/log/wtmp + touch /var/log/lastlog + touch /tmp/resolv.conf.auto + ln -sf /tmp/resolv.conf.auto /tmp/resolv.conf + [ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe + + killall -q hotplug2 + [ -x /sbin/hotplug2 ] && /sbin/hotplug2 --override --persistent \ + --max-children 1 --no-coldplug & + + # the coldplugging of network interfaces needs to happen later, so we do it manually here + for iface in $(awk -F: '/:/ {print $1}' /proc/net/dev); do + /usr/bin/env -i ACTION=add INTERFACE="$iface" /sbin/hotplug-call net + done + + # create /dev/root if it doesn't exist + [ -e /dev/root ] || { + rootdev=$(awk 'BEGIN { RS=" "; FS="="; } $1 == "root" { print $2 }' < /proc/cmdline) + [ -n "$rootdev" ] && ln -s "$rootdev" /dev/root + } + + load_modules /etc/modules.d/* +} diff --git a/target/linux/ps3/petitboot/base-files/etc/inittab b/target/linux/ps3/petitboot/base-files/etc/inittab new file mode 100644 index 000000000..96abea984 --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/etc/inittab @@ -0,0 +1,7 @@ +::sysinit:/etc/init.d/rcS S boot +::shutdown:/etc/init.d/rcS K stop +::ctrlaltdel:/sbin/reboot +::restart:/sbin/init +tty1::respawn:/sbin/initrun +tty2::askfirst:/bin/ash --login +tty3::askfirst:/bin/ash --login diff --git a/target/linux/ps3/petitboot/base-files/etc/sysctl.conf b/target/linux/ps3/petitboot/base-files/etc/sysctl.conf new file mode 100644 index 000000000..1af007925 --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/etc/sysctl.conf @@ -0,0 +1,11 @@ +kernel.panic=3 +net.ipv4.conf.default.arp_ignore=1 +net.ipv4.conf.all.arp_ignore=1 +net.ipv4.ip_forward=1 +net.ipv4.icmp_echo_ignore_broadcasts=1 +net.ipv4.icmp_ignore_bogus_error_responses=1 +net.ipv4.tcp_ecn=1 +net.ipv4.tcp_fin_timeout=30 +net.ipv4.tcp_keepalive_time=120 +net.ipv4.tcp_timestamps=0 +net.core.netdev_max_backlog=30 diff --git a/target/linux/ps3/petitboot/base-files/sbin/initrun b/target/linux/ps3/petitboot/base-files/sbin/initrun new file mode 100755 index 000000000..1c3363fcc --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/sbin/initrun @@ -0,0 +1,18 @@ +#!/bin/sh +# Run petitboot at first startup, otherwise run a login. + +sbindir=/usr/sbin +localstatedir=/var/petitboot + +petitboot=$sbindir/petitboot +run_once=$localstatedir/.run-once + +if [ ! -f $run_once -a -x $petitboot ]; then + # quiet console + echo 3 > /proc/sys/kernel/printk + mkdir -p $localstatedir + touch $run_once + exec $petitboot --timeout +fi + +exec /bin/ash --login diff --git a/target/linux/ps3/petitboot/base-files/sbin/ps3-bl-option b/target/linux/ps3/petitboot/base-files/sbin/ps3-bl-option new file mode 100755 index 000000000..972c00ae1 --- /dev/null +++ b/target/linux/ps3/petitboot/base-files/sbin/ps3-bl-option @@ -0,0 +1,119 @@ +#!/bin/sh +# +# Copyright (C) 2008 Sony Computer Entertainment Inc. +# Copyright 2008 Sony Corp. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +usage() { + echo -n " +SYNOPSIS + ps3-bl-option [OPTION] +DESCRIPTION + Get and set PS3 bootloader options in flash. +OPTIONS + -m, --get-video-mode + Get the bootloader video mode. + -M, --set-video-mode value + Set the bootloader video mode. + -o, --get-bootloader-timeout + Get the bootloader timeout in seconds. + -O, --set-bootloader-timeout value + Set the bootloader timeout in seconds. + -p, --get-bootloader-default + Get the default bootloader menu item. + -P, --set-bootloader-default value + Set the default bootloader menu item. + -t, --get-telnet-enabled + Get the telnet enabled flag. + -T, --set-telnet-enabled value + Set the telnet enabled flag. + -h, --help + Print a help message. +SEE ALSO + ps3-flash-util(8) +" +} + +bad_arg() { + echo "ERROR: bad arg" >&2; + usage + exit 1 +} + +if [ "$#" -eq 0 ] ; then + bad_arg +fi + +get_flag() { + flags=`ps3-flash-util --db-print $1 $2` + echo $(( ${flags:-0} & $3 )) +} + +set_flag() { + flags=`ps3-flash-util --db-print $1 $2` + + if [ $4 -eq 0 ]; then + ps3-flash-util --db-write-half $1 $2 $(( ${flags:-0} & ~$3 )) + else + ps3-flash-util --db-write-half $1 $2 $(( ${flags:-0} | $3 )) + fi +} + +# owners +bootloader="3" + +# keys +item="1" +video="2" +flags="3" +timeout="4" + +# flags +telnet="1" + +case "$1" in + -m | --get-video-mode) + ps3-flash-util --db-print ${bootloader} ${video} + ;; + -M | --set-video-mode) + ps3-flash-util --db-write-half ${bootloader} ${video} $2 + ;; + -o | --get-bootloader-timeout) + ps3-flash-util --db-print ${bootloader} ${timeout} + ;; + -O | --set-bootloader-timeout) + ps3-flash-util --db-write-half ${bootloader} ${timeout} $2 + ;; + -p | --get-bootloader-default) + ps3-flash-util --db-print ${bootloader} ${item} + ;; + -P | --set-bootloader-default) + ps3-flash-util --db-write-word ${bootloader} ${item} $2 + ;; + -t | --get-telnet-enabled) + get_flag ${bootloader} ${flags} ${telnet} + ;; + -T | --set-telnet-enabled) + set_flag ${bootloader} ${flags} ${telnet} $2 + ;; + -h | --help) + usage + exit 0 + ;; + *) + bad_arg + ;; +esac diff --git a/target/linux/ps3/petitboot/defconfig-ps3-petitboot b/target/linux/ps3/petitboot/defconfig-ps3-petitboot new file mode 100644 index 000000000..72a2551af --- /dev/null +++ b/target/linux/ps3/petitboot/defconfig-ps3-petitboot @@ -0,0 +1,19 @@ +# Configuration overrides + +CONFIG_TARGET_ps3=y + +CONFIG_BUSYBOX_CONFIG_GETTY=y +CONFIG_BUSYBOX_CONFIG_FDISK=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_BUSYBOX_CONFIG_BRCTL is not set +# CONFIG_BUSYBOX_CONFIG_HTTPD is not set +CONFIG_BUSYBOX_CONFIG_TFTP=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_GET=y + +# CONFIG_PACKAGE_udevtrigger is not set +CONFIG_UDEV_ENABLE_DEBUG=y + +CONFIG_PETITBOOT_DEBUG=y +CONFIG_PETITBOOT_PS3=y +# CONFIG_PETITBOOT_AUTORUN_GUI is not set +CONFIG_PETITBOOT_AUTORUN_CUI=y diff --git a/target/linux/ps3/petitboot/profiles/000-Default.mk b/target/linux/ps3/petitboot/profiles/000-Default.mk new file mode 100644 index 000000000..61cfc0796 --- /dev/null +++ b/target/linux/ps3/petitboot/profiles/000-Default.mk @@ -0,0 +1,19 @@ +# +# Copyright (C) 2009 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +define Profile/Default + NAME:=Default PS3 Petitboot profile + PACKAGES:=-dnsmasq -iptables -opkg -ppp -ppp-mod-pppoe -kmod-ipt-nathelper \ + -firewall -mtd -hotplug2 -swconfig \ + kexec-tools ps3-utils petitboot +endef + +define Profile/Default/Description + Default PS3 Petitboot profile +endef +$(eval $(call Profile,Default)) + diff --git a/target/linux/ps3/petitboot/target.mk b/target/linux/ps3/petitboot/target.mk new file mode 100644 index 000000000..845c4316d --- /dev/null +++ b/target/linux/ps3/petitboot/target.mk @@ -0,0 +1,6 @@ +BOARDNAME:=Petitboot +FEATURES+=fpu ramdisk + +define Target/Description + Build Petitboot bootloader +endef |