sourceparts-pocketpc: new device (MR 2807)

The Pocket P.C. PDA from SourceParts/Popcorn Computers.
This commit is contained in:
Martijn Braam 2021-11-25 22:17:35 +01:00 committed by Luca Weiss
parent adb40263c3
commit d199a3b1ef
No known key found for this signature in database
GPG key ID: 72D843B89D4DD756
9 changed files with 6424 additions and 0 deletions

View file

@ -0,0 +1,46 @@
# Reference: <https://postmarketos.org/devicepkg>
pkgname=device-sourceparts-pocketpc
pkgdesc="Source Parts Pocket P.C."
pkgver=0.1
pkgrel=0
url="https://postmarketos.org"
license="MIT"
arch="aarch64"
options="!check !archcheck"
depends="
linux-sourceparts-pocketpc
mesa-dri-gallium
postmarketos-base
u-boot-sourceparts-pocketpc
uboot-tools
"
makedepends="devicepkg-dev"
source="
deviceinfo
uboot-script.cmd
"
build() {
devicepkg_build $startdir $pkgname
mkimage \
-A arm \
-O linux \
-T script \
-C none \
-a 0 \
-e 0 \
-n postmarketos \
-d "$srcdir"/uboot-script.cmd \
"$srcdir"/boot.scr
}
package() {
devicepkg_package $startdir $pkgname
install -Dm644 "$srcdir"/boot.scr \
"$pkgdir"/boot/boot.scr
}
sha512sums="
69d6d0f8daf09403cd59a46873db575616ca9c7c5d2571a2e6aa975d26cc7777f47f51201003d197f3df32f41e076be64a4f4559db5c6bd234a4dfd6dfc9a169 deviceinfo
328658f476cf43962e4bf2e9b2c0773f3fd5bad5cbe8543fb32ef9447b4c2729c1f625be0e1042517a456a44c4f77bae5b82ec208dc6789ba26545e3fce2578d uboot-script.cmd
"

View file

@ -0,0 +1,28 @@
# Reference: <https://postmarketos.org/deviceinfo>
# Please use double quotes only. You can source this file in shell
# scripts.
deviceinfo_format_version="0"
deviceinfo_name="Source Parts Pocket P.C."
deviceinfo_manufacturer="Source Parts"
deviceinfo_codename="sourceparts-pocketpc"
deviceinfo_year="2021"
deviceinfo_dtb="allwinner/sun50i-a64-pocket-pc"
deviceinfo_arch="aarch64"
# Device related
deviceinfo_gpu_accelerated="true"
deviceinfo_chassis="tablet"
deviceinfo_keyboard="true"
deviceinfo_external_storage="true"
deviceinfo_screen_width="1920"
deviceinfo_screen_height="1080"
deviceinfo_getty="ttyS0;115200"
deviceinfo_mesa_driver="sun4i-drm"
deviceinfo_dev_internal_storage="/dev/mmcblk2"
deviceinfo_dev_internal_storage_repartition="true"
# Bootloader related
deviceinfo_flash_method="none"
deviceinfo_generate_legacy_uboot_initfs="true"
deviceinfo_sd_embed_firmware="u-boot/sourceparts-pocketpc/u-boot-sunxi-with-spl-552.bin:8"

View file

@ -0,0 +1,28 @@
if test ${mmc_bootdev} -eq 0 ; then
echo "Booting from SD";
setenv bootdev 0;
else
echo "Booting from eMMC";
setenv bootdev 2;
fi;
# This is close to the max env size, https://unix.stackexchange.com/questions/530762/max-line-length-for-u-boot-setenv
setenv bootargs init=/init.sh rw console=tty0 console=ttyS0,115200 earlycon=uart,mmio32,0x01c28000 panic=10 consoleblank=0 loglevel=1 fbcon=rotate:1 PMOS_NO_OUTPUT_REDIRECT PMOS_FORCE_PARTITION_RESIZE pmos_boot=/dev/mmcblk${bootdev}p1 pmos_root=/dev/mmcblk${bootdev}p2
printenv
echo Loading DTB
load mmc ${mmc_bootdev}:1 ${fdt_addr_r} sun50i-a64-pocket-pc.dtb
echo Loading Initramfs
load mmc ${mmc_bootdev}:1 ${ramdisk_addr_r} uInitrd
echo Loading Kernel
load mmc ${mmc_bootdev}:1 ${kernel_addr_r} vmlinuz
echo Resizing FDT
fdt addr ${fdt_addr_r}
fdt resize
echo Booting kernel
booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

View file

@ -0,0 +1,26 @@
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 8744f944ede9..e224887bd891 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -106,4 +106,12 @@ source "drivers/staging/hikey9xx/Kconfig"
source "drivers/staging/rtl8723cs/Kconfig"
+config RTL8723DS
+ tristate "Realtek RTL8723DS SDIO WiFi driver"
+ depends on WLAN && MMC && CFG80211
+ select WIRELESS_EXT
+ select WEXT_PRIV
+ help
+ Help message of RTL8723DS
+
endif # STAGING
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index 90ea2bf5ff76..72c9957832d3 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -43,3 +43,4 @@ obj-$(CONFIG_QLGE) += qlge/
obj-$(CONFIG_WFX) += wfx/
obj-y += hikey9xx/
obj-$(CONFIG_RTL8723CS) += rtl8723cs/
+obj-$(CONFIG_RTL8723DS) += rtl8723ds/

View file

@ -0,0 +1,91 @@
# Maintainer: Martijn Braam <martijn@brixit.nl>
_flavor=sourceparts-pocketpc
_config="config-$_flavor.$CARCH"
pkgname=linux-$_flavor
pkgver=5.14.6_git20210920
pkgrel=0
_tag="81a7953afc5cd1001b727701dc99625ec656160a"
_wifi_ref="1b6ddd544b4a829ed2b7feb32575359b6443cd3d"
pkgdesc="Kernel fork for the Pocket P.C."
arch="aarch64"
url="https://megous.com/git/linux/"
license="GPL-2.0-only"
makedepends="
bison
devicepkg-dev
findutils
flex
gmp-dev
installkernel
mpc1-dev
mpfr-dev
openssl-dev
perl
rsync
xz
"
options="!strip !check !tracedeps
pmb:cross-native
pmb:kconfigcheck-anbox
pmb:kconfigcheck-iwd
pmb:kconfigcheck-nftables
pmb:kconfigcheck-zram
"
source="$pkgname-$_tag.tar.gz::https://github.com/PopcornComputer/PocketPC-Linux/archive/$_tag.tar.gz
https://github.com/lwfinger/rtl8723ds/archive/$_wifi_ref.tar.gz
0001-rtl8723ds.patch
config-$_flavor.aarch64
"
subpackages="$pkgname-dev"
builddir="$srcdir/PocketPC-Linux-$_tag"
case "$CARCH" in
aarch64*) _carch="arm64" ;;
arm*) _carch="arm" ;;
esac
prepare() {
default_prepare
mv "$srcdir"/rtl8723ds-$_wifi_ref "$builddir"/drivers/staging/rtl8723ds
REPLACE_GCCH=0 \
. downstreamkernel_prepare
}
build() {
unset LDFLAGS
make ARCH="$_carch" CC="${CC:-gcc}" \
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-$_flavor" \
CFLAGS_MODULE=-fno-pic \
DTC_FLAGS="-@"
}
package() {
downstreamkernel_package "$builddir" "$pkgdir" "$_carch" "$_flavor"
make -j1 modules_install dtbs_install \
ARCH="$_carch" \
INSTALL_MOD_STRIP=1 \
INSTALL_MOD_PATH="$pkgdir" \
INSTALL_DTBS_PATH="$pkgdir/usr/share/dtb"
}
dev() {
provides="linux-headers"
replaces="linux-headers"
cd $builddir
# https://github.com/torvalds/linux/blob/master/Documentation/kbuild/headers_install.rst
make -j1 headers_install \
ARCH="$_carch" \
INSTALL_HDR_PATH="$subpkgdir"/usr
}
sha512sums="
49e091de60b820c48e19bb9d3602cb0e5c3470b99112ad63da3f112b503569e6bab21738f2be014705212974a3a824c9f91acd98fa33632e7bc8bf2057f51d75 linux-sourceparts-pocketpc-81a7953afc5cd1001b727701dc99625ec656160a.tar.gz
68001a7fdc022b4ff82e3f1762a00369c2be18a4c9f5ea2074e3e9248678c48525f4bcec47ef0c4678d6a0b6aef031eb52cac9a9811f3291a73e00cb33fb5c85 1b6ddd544b4a829ed2b7feb32575359b6443cd3d.tar.gz
75af8bd55fc006b8f208fec57bce612112ff066fa71f1cfe6d4a0904e201e54d574dbf13ae8913ec570f790ac360f4b87ac26e7dac19f641a7f4c403a5df938b 0001-rtl8723ds.patch
d637fc8c40971b7b5587039bddd8103fda5559e3055fe9ec7b2d0b40f62b213d04e70f165f50e2eca0cd25874e32352a9b62f490964a09a5755f013aebfcc61a config-sourceparts-pocketpc.aarch64
"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,51 @@
# U-boot with patches to make the PinePhone boot faster and have control over the ddr clock speed
pkgname=u-boot-sourceparts-pocketpc
pkgver=2021.1
pkgrel=0
pkgdesc="U-Boot bootloader for the Sourceparts Pocket P.C."
url="https://source.denx.de/u-boot"
arch="aarch64"
license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs
ISC LGPL-2.0-only LGPL-2.1-only X11"
makedepends="$depends_dev bc dtc python3-dev py3-setuptools swig bison flex openssl-dev arm-trusted-firmware"
options="!check"
_ref="49694d39d856c9ab537c4f2ff1d0167f4e21d19b"
source="https://github.com/PopcornComputer/PocketPC-Uboot/archive/$_ref.tar.gz
update-u-boot
"
builddir="$srcdir/PocketPC-Uboot-$_ref"
install="$pkgname.post-upgrade"
_frequencies='528 552 624'
build() {
touch include/config.h
LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > include/timestamp_autogenerated.h
LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> include/timestamp_autogenerated.h
export BL31="/usr/share/arm-trusted-firmware/sun50i_a64/bl31.bin"
export BUILD_DIR="$builddir"/build
for freq in $_frequencies; do
mkdir -p "$BUILD_DIR-$freq"
sed -rie "s/^(CONFIG_DRAM_CLK=).*$/CONFIG_DRAM_CLK=$freq/" configs/pocket_pc_defconfig
cat configs/pocket_pc_defconfig | grep CONFIG_DRAM_CLK
make O="$BUILD_DIR-$freq" HOSTCC=gcc ARCH=arm pocket_pc_defconfig
make O="$BUILD_DIR-$freq" HOSTCC=gcc ARCH=arm all
sha512sum -b "$BUILD_DIR-$freq/u-boot-sunxi-with-spl.bin" > "$BUILD_DIR-$freq/u-boot-sunxi-with-spl.bin.sha512"
done
}
package() {
for freq in $_frequencies; do
install -D -m644 "build-$freq/u-boot-sunxi-with-spl.bin" \
"$pkgdir/usr/share/u-boot/sourceparts-pocketpc/u-boot-sunxi-with-spl-$freq.bin"
install -D -m644 "build-$freq/u-boot-sunxi-with-spl.bin.sha512" \
"$pkgdir/usr/share/u-boot/sourceparts-pocketpc/u-boot-sunxi-with-spl-$freq.bin.sha512"
done
install -D -m 755 "$srcdir"/update-u-boot "$pkgdir"/usr/sbin/update-u-boot
}
sha512sums="
39caa823655d38510d563b149265da1bba2e63efcd2ef5999a0a41a6b96775108c3ee86e6d9d6acc0fc11acb8dd66e534ec834c12fd8cd76057ca52c581557fe 49694d39d856c9ab537c4f2ff1d0167f4e21d19b.tar.gz
d9ebf59e37a2d8435d5a31884fde554f175390d1ce23511da8d38ba368f6b812b45f1399a0fa49821c37ef573dfb4500e895fcc993bb247fae88f63b3bb7804f update-u-boot
"

View file

@ -0,0 +1,3 @@
#!/bin/sh
update-u-boot -s

View file

@ -0,0 +1,196 @@
#!/bin/sh
verbose=
board=
device=
dryrun=
imagedir=
default_freq=528
freq=
skip_delay=
get_boot_blockdev() {
# Find the blockdevice where /boot is mounted from
mount | sed -n -E 's:.*(/dev/mmcblk[0-9])p[0-9] on /boot .*:\1:p'
}
get_defaults() {
if [ -z "$board" -a -e /sys/firmware/devicetree/base/compatible ]; then
case "$(cat /sys/firmware/devicetree/base/compatible 2>/dev/null)" in
pine64,pinephone*) board=pinephone ;;
pine64,pinetab*) board=pinetab ;;
esac
fi
if [ -z "$device" ]; then
case "$board" in
pinephone|pinetab) device=$(get_boot_blockdev) ;;
esac
fi
if [ -z "$imagedir" ]; then
imagedir="$(realpath $(dirname $0))"
[ -f "$imagedir/README.txt" ] || imagedir="/usr/share/u-boot"
fi
if [ -z "$freq" -a -e /proc/device-tree/memory/ram_freq ]; then
proc_freq=$(cat /proc/device-tree/memory/ram_freq 2>/dev/null)
if [ -n "$proc_freq" ]; then
echo "Detected clock: $proc_freq MHz"
default_freq="$proc_freq"
else
echo "WARNING: Failed to read clock from /proc/device-tree/memory/ram_freq"
echo "Using default clock: $default_freq MHz"
fi
elif [ -z "$freq" ]; then
echo Using default clock: $default_freq MHz
else
echo Changing clock: $freq MHz
fi
}
die() {
echo "ERROR: $@"
exit 1
}
usage() {
get_defaults
cat <<EOF
usage: $0 [-n,--dry-run] [-i,--imagedir <imagedir>] [-b|--board <board-type>] [-d|--device <device>] [-r|--ram-freq <freq>] [-s|--skip-delay]
options:
-b,--board <board> Specify the board type: pinephone, pinetab
(current default: ${board:-none})
-d,--device <device> Specify the device where to install u-boot
(current default: ${device:-none})
-i,--imagedir <imagedir> Specify u-boot image directory
(current default: ${imagedir:-none})
-n,--dry-run Print commands but don't execute them
-r,--ram-freq RAM clock speed, one of:
* 528 (default for new postmarketOS installations)
* 552 (default before v21.03 / edge 2021-04-05)
* 624
-s,--skip-delay Skip delay and flash the image immediately
EOF
}
validate_checksum() {
file="$1"
file_sha512="$file.sha512"
file_size=$(stat -c%s $file)
device="$2"
bs="$3"
seek="$4"
checksum0=$(cat $file_sha512 | awk {'print $1'})
checksum1=$(dd if=$device bs=1 skip=$(($seek * $bs)) count=$file_size status=none | sha512sum | awk {'print $1'})
if [ "$checksum0" != "$checksum1" ]; then
echo "File: $checksum0"
echo "Part: $checksum1"
die "Checksum failed"
fi
echo "Successful U-Boot image checksum verification on $device :"
echo -e "\t$checksum1"
}
while [ $# -gt 0 ]; do
opt="$1"
shift
case "$opt" in
-b|--board)
case "$1" in
pinephone) board="pinephone" ;;
pinetab) board="pinetab" ;;
pocketpc) board="pocketpc" ;;
*) usage; exit 1;;
esac
shift
;;
-d|--device)
device="$1"
shift
;;
-i|--imagedir)
imagedir="$1"
shift
;;
-n|--dry-run)
dryrun="echo"
;;
-r|--ram-freq)
case "$1" in
528) freq="528" ;;
552) freq="552" ;;
624) freq="624" ;;
*) usage; exit 1;;
esac
shift
;;
-s|--skip-delay)
skip_delay="yes"
;;
--)
break
;;
-*)
usage
exit 1
;;
esac
done
get_defaults
if [ -z "$board" -o -z "$device" -o -z "$imagedir" -o ! -e "$imagedir" ]; then
usage
exit 1
fi
if [ -z "$dryrun" ]; then
if [ ! -z "$freq" ]; then
echo "/!\ Disclaimer warning:"
echo "Overclocking your device may render it unstable or prevent it to boot"
echo "If you're unable to boot your device you'll have to flash an image to a mSD card"
echo "then boot on it and update u-boot running this command:"
echo "update-u-boot -d /dev/mmcblk2"
echo
read -p "Continue? (y/n) [n]: " -n 1 -r
echo
case "$REPLY" in
y|Y) ;;
*) exit 1 ;;
esac
fi
if [ -z "$skip_delay" ]; then
echo "Updating $board u-boot in $device in 3 seconds..."
sleep 3
else
echo "Updating $board u-boot in $device"
fi
fi
if [ -z "$freq" ]; then
freq=$default_freq
fi
(
set -e
case "$board" in
pinephone|pinetab|pocketpc)
[ -e "$imagedir/sourceparts-pocketpc/" ] || die "pocketpc images not installed, apk add u-boot-sourceparts-pocketpc"
$dryrun dd if=$imagedir/sourceparts-pocketpc/u-boot-sunxi-with-spl-$freq.bin of=$device bs=1024 seek=8 oflag=direct status=none
[ -z "$dryrun" ] && validate_checksum $imagedir/sourceparts-pocketpc/u-boot-sunxi-with-spl-$freq.bin $device 1024 8
;;
esac
$dryrun sync
) || die "U-Boot installation in $device failed"
[ -z "$dryrun" ] && echo "Completed successfully."