* [RFC 0/4] Run barebox on sc6531e-based feature phone
@ 2023-06-10 10:32 Antony Pavlov
2023-06-10 10:32 ` [RFC 1/4] clocksource: add sc6531e driver Antony Pavlov
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Antony Pavlov @ 2023-06-10 10:32 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
This patch series adds initial support for SC6531E chip.
SC6431E chip is specially designed solution for creating
feature phones. It contains
* ARM926EJ-S core (up to 208 MHz)
* embedded PSRAM
* peripherals: USB, SPI, UART, IIS, PCM, I2C, keypad, LCD
* SIM card and GSM/GPRS/FM/BT stuff
This work is based on FPDoom, see [1], [2], [3] for details.
At the moment only timer and debug_ll output via USB
are supported.
After adding lcd and keypad driver running bareDOOM [4]
on SC6531E will be possible.
[1] https://github.com/ilyakurdyukov/fpdoom
[2] https://habr.com/ru/articles/706766/
[3] https://www.youtube.com/watch?v=tln_Iace1O8
[4] https://github.com/a3f/bareDOOM
Antony Pavlov (4):
clocksource: add sc6531e driver
ARM: add sc6531e and F+ Ezzy 4 phone support
sc6531e: add debug_ll support
Documentation: add sc6531e instructions
Documentation/boards/sc6531e.rst | 187 +++++++++
arch/arm/Kconfig | 10 +
arch/arm/Makefile | 1 +
arch/arm/boards/Makefile | 1 +
arch/arm/boards/ezzy-4/Makefile | 6 +
arch/arm/boards/ezzy-4/env/init/automount | 27 ++
arch/arm/boards/ezzy-4/lowlevel.c | 19 +
arch/arm/boards/ezzy-4/usbio.c | 449 ++++++++++++++++++++++
arch/arm/configs/ezzy-4_defconfig | 49 +++
arch/arm/cpu/uncompress.c | 7 +
arch/arm/dts/Makefile | 1 +
arch/arm/dts/ezzy-4.dts | 22 ++
arch/arm/include/asm/debug_ll.h | 2 +
arch/arm/mach-sc6531e/Kconfig | 17 +
arch/arm/mach-sc6531e/Makefile | 3 +
drivers/clocksource/Makefile | 1 +
drivers/clocksource/timer-sc6531e.c | 70 ++++
include/mach/sc6531e/debug_ll.h | 17 +
18 files changed, 889 insertions(+)
create mode 100644 Documentation/boards/sc6531e.rst
create mode 100644 arch/arm/boards/ezzy-4/Makefile
create mode 100644 arch/arm/boards/ezzy-4/env/init/automount
create mode 100644 arch/arm/boards/ezzy-4/lowlevel.c
create mode 100644 arch/arm/boards/ezzy-4/usbio.c
create mode 100644 arch/arm/configs/ezzy-4_defconfig
create mode 100644 arch/arm/dts/ezzy-4.dts
create mode 100644 arch/arm/mach-sc6531e/Kconfig
create mode 100644 arch/arm/mach-sc6531e/Makefile
create mode 100644 drivers/clocksource/timer-sc6531e.c
create mode 100644 include/mach/sc6531e/debug_ll.h
--
2.39.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [RFC 1/4] clocksource: add sc6531e driver
2023-06-10 10:32 [RFC 0/4] Run barebox on sc6531e-based feature phone Antony Pavlov
@ 2023-06-10 10:32 ` Antony Pavlov
2023-06-10 10:32 ` [RFC 2/4] ARM: add sc6531e and F+ Ezzy 4 phone support Antony Pavlov
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Antony Pavlov @ 2023-06-10 10:32 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
drivers/clocksource/Makefile | 1 +
drivers/clocksource/timer-sc6531e.c | 70 +++++++++++++++++++++++++++++
2 files changed, 71 insertions(+)
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index eceaa990d43..863a7e931cf 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -26,3 +26,4 @@ obj-$(CONFIG_CLINT_TIMER) += timer-clint.o
obj-$(CONFIG_RISCV_TIMER) += timer-riscv.o
obj-$(CONFIG_ARMV7M_SYSTICK) += armv7m_systick.o
obj-$(CONFIG_CLKSRC_STM32) += timer-stm32.o
+obj-$(CONFIG_ARCH_SC6531E) += timer-sc6531e.o
diff --git a/drivers/clocksource/timer-sc6531e.c b/drivers/clocksource/timer-sc6531e.c
new file mode 100644
index 00000000000..c5f095f1a2e
--- /dev/null
+++ b/drivers/clocksource/timer-sc6531e.c
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2023 Antony Pavlov <antonynpavlov@gmail.com>
+ *
+ * This file is part of barebox.
+ */
+
+#include <common.h>
+#include <io.h>
+#include <init.h>
+#include <clock.h>
+#include <linux/err.h>
+
+#include <debug_ll.h>
+
+#define SC6531E_TIMER_CLOCK 1000
+
+#define SYST_VALUE_SHDW 0x0c
+
+static void __iomem *timer_base;
+
+static uint64_t sc6531e_cs_read(void)
+{
+ return (uint64_t)readl(timer_base + SYST_VALUE_SHDW);
+}
+
+static struct clocksource sc6531e_cs = {
+ .read = sc6531e_cs_read,
+ .mask = CLOCKSOURCE_MASK(32),
+ .priority = 60,
+};
+
+static int sc6531e_timer_probe(struct device *dev)
+{
+ struct resource *iores;
+
+ /* use only one timer */
+ if (timer_base)
+ return -EBUSY;
+
+ iores = dev_request_mem_resource(dev, 0);
+ if (IS_ERR(iores)) {
+ dev_err(dev, "could not get memory region\n");
+ return PTR_ERR(iores);
+ }
+
+ timer_base = IOMEM(iores->start);
+ clocks_calc_mult_shift(&sc6531e_cs.mult, &sc6531e_cs.shift,
+ SC6531E_TIMER_CLOCK, NSEC_PER_SEC, 1);
+
+ init_clock(&sc6531e_cs);
+
+ return 0;
+}
+
+static __maybe_unused struct of_device_id sc6531e_timer_dt_ids[] = {
+ {
+ .compatible = "sc6531e-timer",
+ }, {
+ /* sentinel */
+ }
+};
+
+static struct driver sc6531e_timer_driver = {
+ .probe = sc6531e_timer_probe,
+ .name = "sc6531e-timer",
+ .of_compatible = DRV_OF_COMPAT(sc6531e_timer_dt_ids),
+};
+
+coredevice_platform_driver(sc6531e_timer_driver);
--
2.39.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [RFC 2/4] ARM: add sc6531e and F+ Ezzy 4 phone support
2023-06-10 10:32 [RFC 0/4] Run barebox on sc6531e-based feature phone Antony Pavlov
2023-06-10 10:32 ` [RFC 1/4] clocksource: add sc6531e driver Antony Pavlov
@ 2023-06-10 10:32 ` Antony Pavlov
2023-06-10 10:32 ` [RFC 3/4] sc6531e: add debug_ll support Antony Pavlov
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Antony Pavlov @ 2023-06-10 10:32 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
arch/arm/Kconfig | 9 +++++
arch/arm/Makefile | 1 +
arch/arm/boards/Makefile | 1 +
arch/arm/boards/ezzy-4/Makefile | 3 ++
arch/arm/boards/ezzy-4/env/init/automount | 27 +++++++++++++
arch/arm/boards/ezzy-4/lowlevel.c | 19 +++++++++
arch/arm/configs/ezzy-4_defconfig | 49 +++++++++++++++++++++++
arch/arm/dts/Makefile | 1 +
arch/arm/dts/ezzy-4.dts | 22 ++++++++++
arch/arm/mach-sc6531e/Kconfig | 17 ++++++++
arch/arm/mach-sc6531e/Makefile | 3 ++
11 files changed, 152 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index e76ee0f6dfe..b46d73f5084 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -84,6 +84,14 @@ config ARCH_DIGIC
help
Support for Canon's digital cameras that use the DIGIC4 chip.
+config ARCH_SC6531E
+ bool "SC6531E-based devices"
+ depends on 32BIT
+ select CPU_ARM926T
+ select GPIOLIB
+ help
+ Support for feature phones based on the SC6531E chipset.
+
config ARCH_EP93XX
bool "Cirrus Logic EP93xx"
depends on 32BIT
@@ -330,6 +338,7 @@ source "arch/arm/mach-nomadik/Kconfig"
source "arch/arm/mach-omap/Kconfig"
source "arch/arm/mach-pxa/Kconfig"
source "arch/arm/mach-rockchip/Kconfig"
+source "arch/arm/mach-sc6531e/Kconfig"
source "arch/arm/mach-socfpga/Kconfig"
source "arch/arm/mach-stm32mp/Kconfig"
source "arch/arm/mach-versatile/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 2208b071ac1..96a32aca8b4 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -104,6 +104,7 @@ machine-$(CONFIG_ARCH_OMAP) += omap
machine-$(CONFIG_ARCH_PXA) += pxa
machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip
machine-$(CONFIG_ARCH_SAMSUNG) += samsung
+machine-$(CONFIG_ARCH_SC6531E) += sc6531e
machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
machine-$(CONFIG_ARCH_STM32MP) += stm32mp
machine-$(CONFIG_ARCH_VERSATILE) += versatile
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
index 2877debad53..8abd8872757 100644
--- a/arch/arm/boards/Makefile
+++ b/arch/arm/boards/Makefile
@@ -44,6 +44,7 @@ obj-$(CONFIG_MACH_EMBEST_MARSBOARD) += embest-marsboard/
obj-$(CONFIG_MACH_EMBEST_RIOTBOARD) += embest-riotboard/
obj-$(CONFIG_MACH_ELTEC_HIPERCAM) += eltec-hipercam/
obj-y += freescale-mx51-babbage/
+obj-$(CONFIG_MACH_EZZY4) += ezzy-4/
obj-$(CONFIG_MACH_FREESCALE_MX53_LOCO) += freescale-mx53-qsb/
obj-$(CONFIG_MACH_FREESCALE_MX53_VMX53) += freescale-mx53-vmx53/
obj-$(CONFIG_MACH_FREESCALE_MX7_SABRESD) += freescale-mx7-sabresd/
diff --git a/arch/arm/boards/ezzy-4/Makefile b/arch/arm/boards/ezzy-4/Makefile
new file mode 100644
index 00000000000..458f5209008
--- /dev/null
+++ b/arch/arm/boards/ezzy-4/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+lwl-y += lowlevel.o
diff --git a/arch/arm/boards/ezzy-4/env/init/automount b/arch/arm/boards/ezzy-4/env/init/automount
new file mode 100644
index 00000000000..6be2b6508a0
--- /dev/null
+++ b/arch/arm/boards/ezzy-4/env/init/automount
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+version
+echo
+help
+echo
+cpuinfo
+echo
+iomem
+echo
+meminfo
+echo
+of_dump
+echo
+drvinfo
+echo
+
+timeout 3
+echo
+
+echo sleep 0
+sleep 1
+echo sleep 1
+sleep 1
+echo sleep 2
+sleep 1
+echo sleep 3
diff --git a/arch/arm/boards/ezzy-4/lowlevel.c b/arch/arm/boards/ezzy-4/lowlevel.c
new file mode 100644
index 00000000000..e06ac493bc6
--- /dev/null
+++ b/arch/arm/boards/ezzy-4/lowlevel.c
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <common.h>
+#include <linux/sizes.h>
+#include <asm/barebox-arm-head.h>
+#include <asm/barebox-arm.h>
+
+extern char __dtb_ezzy_4_start[];
+
+void __naked barebox_arm_reset_vector(uint32_t r0, uint32_t r1, uint32_t r2)
+{
+ void *fdt;
+
+ arm_cpu_lowlevel_init();
+
+ fdt = __dtb_ezzy_4_start + get_runtime_offset();
+
+ barebox_arm_entry(0x14000000, SZ_4M, fdt);
+}
diff --git a/arch/arm/configs/ezzy-4_defconfig b/arch/arm/configs/ezzy-4_defconfig
new file mode 100644
index 00000000000..4701f78fc6a
--- /dev/null
+++ b/arch/arm/configs/ezzy-4_defconfig
@@ -0,0 +1,49 @@
+CONFIG_TEXT_BASE=0x14300000
+CONFIG_ARCH_SC6531E=y
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_PBL_IMAGE=y
+CONFIG_IMAGE_COMPRESSION_NONE=y
+CONFIG_MALLOC_SIZE=0x100000
+CONFIG_PROMPT="ezzy-4 > "
+CONFIG_HUSH_FANCY_PROMPT=y
+CONFIG_CMDLINE_EDITING=y
+CONFIG_AUTO_COMPLETE=y
+CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
+CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/ezzy-4/env"
+CONFIG_DEBUG_LL=y
+CONFIG_DEBUG_INITCALLS=y
+CONFIG_DEBUG_PBL=y
+CONFIG_CMD_IOMEM=y
+CONFIG_CMD_MEMINFO=y
+# CONFIG_CMD_BOOTM is not set
+# CONFIG_CMD_BOOTU is not set
+CONFIG_CMD_GO=y
+# CONFIG_CMD_MOUNT is not set
+# CONFIG_CMD_UMOUNT is not set
+CONFIG_CMD_EXPORT=y
+CONFIG_CMD_MD5SUM=y
+# CONFIG_CMD_PWD is not set
+CONFIG_CMD_SHA1SUM=y
+CONFIG_CMD_LET=y
+CONFIG_CMD_MSLEEP=y
+CONFIG_CMD_SLEEP=y
+# CONFIG_CMD_CLEAR is not set
+CONFIG_CMD_ECHO_E=y
+CONFIG_CMD_EDIT=y
+CONFIG_CMD_TIMEOUT=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MM=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_LED=y
+CONFIG_CMD_OF_NODE=y
+CONFIG_CMD_OF_PROPERTY=y
+CONFIG_CMD_OFTREE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_UPTIME=y
+CONFIG_OFDEVICE=y
+# CONFIG_SPI is not set
+CONFIG_CLOCKSOURCE_DUMMY_RATE=2000
+CONFIG_LED=y
+CONFIG_LED_GPIO=y
+CONFIG_LED_GPIO_OF=y
+CONFIG_ZLIB=y
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 98f4c4e0194..ef21d1ab60c 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -8,6 +8,7 @@ lwl-$(CONFIG_MACH_ADVANTECH_ROM_742X) += imx6dl-advantech-rom-7421.dtb.o
lwl-$(CONFIG_MACH_AFI_GF) += am335x-afi-gf.dtb.o
lwl-$(CONFIG_MACH_BEAGLEBONE) += am335x-bone.dtb.o am335x-boneblack.dtb.o am335x-bone-common.dtb.o
lwl-$(CONFIG_MACH_CANON_A1100) += canon-a1100.dtb.o
+lwl-$(CONFIG_MACH_EZZY4) += ezzy-4.dtb.o
lwl-$(CONFIG_MACH_CLEP7212) += ep7212-clep7212.dtb.o
lwl-$(CONFIG_MACH_CM_FX6) += imx6dl-cm-fx6.dtb.o imx6q-cm-fx6.dtb.o imx6q-utilite.dtb.o
lwl-$(CONFIG_MACH_DFI_FS700_M60) += imx6q-dfi-fs700-m60-6q.dtb.o imx6dl-dfi-fs700-m60-6s.dtb.o
diff --git a/arch/arm/dts/ezzy-4.dts b/arch/arm/dts/ezzy-4.dts
new file mode 100644
index 00000000000..7b326bb23c8
--- /dev/null
+++ b/arch/arm/dts/ezzy-4.dts
@@ -0,0 +1,22 @@
+/dts-v1/;
+
+/ {
+ model = "F+ Ezzy 4";
+ compatible = "f+,ezzy-4";
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ chosen { };
+
+ memory {
+ device_type = "memory";
+ reg = <0x14000000 0x00400000>;
+ };
+
+ timer: timer@81003000 {
+ compatible = "sc6531e-timer";
+ reg = <0x81003000 0x100>;
+ status = "okay";
+ };
+};
diff --git a/arch/arm/mach-sc6531e/Kconfig b/arch/arm/mach-sc6531e/Kconfig
new file mode 100644
index 00000000000..f0c4b16550c
--- /dev/null
+++ b/arch/arm/mach-sc6531e/Kconfig
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+if ARCH_SC6531E
+
+choice
+ prompt "board type"
+
+config MACH_EZZY4
+ bool "F+ Ezzy 4"
+
+endchoice
+
+config ARCH_TEXT_BASE
+ hex
+ default 0x00001900 if MACH_EZZY4
+
+endif
diff --git a/arch/arm/mach-sc6531e/Makefile b/arch/arm/mach-sc6531e/Makefile
new file mode 100644
index 00000000000..1c2b374603c
--- /dev/null
+++ b/arch/arm/mach-sc6531e/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+obj- := __dummy__.o
--
2.39.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [RFC 3/4] sc6531e: add debug_ll support
2023-06-10 10:32 [RFC 0/4] Run barebox on sc6531e-based feature phone Antony Pavlov
2023-06-10 10:32 ` [RFC 1/4] clocksource: add sc6531e driver Antony Pavlov
2023-06-10 10:32 ` [RFC 2/4] ARM: add sc6531e and F+ Ezzy 4 phone support Antony Pavlov
@ 2023-06-10 10:32 ` Antony Pavlov
2023-06-10 10:32 ` [RFC 4/4] Documentation: add sc6531e instructions Antony Pavlov
2023-07-04 12:03 ` [RFC 0/4] Run barebox on sc6531e-based feature phone Sascha Hauer
4 siblings, 0 replies; 7+ messages in thread
From: Antony Pavlov @ 2023-06-10 10:32 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
arch/arm/Kconfig | 1 +
arch/arm/boards/ezzy-4/Makefile | 3 +
arch/arm/boards/ezzy-4/usbio.c | 449 ++++++++++++++++++++++++++++++++
arch/arm/cpu/uncompress.c | 7 +
arch/arm/include/asm/debug_ll.h | 2 +
include/mach/sc6531e/debug_ll.h | 17 ++
6 files changed, 479 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index b46d73f5084..ffd2ff8b531 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -88,6 +88,7 @@ config ARCH_SC6531E
bool "SC6531E-based devices"
depends on 32BIT
select CPU_ARM926T
+ select HAS_DEBUG_LL
select GPIOLIB
help
Support for feature phones based on the SC6531E chipset.
diff --git a/arch/arm/boards/ezzy-4/Makefile b/arch/arm/boards/ezzy-4/Makefile
index 458f5209008..c1253f3f64f 100644
--- a/arch/arm/boards/ezzy-4/Makefile
+++ b/arch/arm/boards/ezzy-4/Makefile
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-only
lwl-y += lowlevel.o
+
+lwl-y += usbio.o
+obj-y += usbio.o
diff --git a/arch/arm/boards/ezzy-4/usbio.c b/arch/arm/boards/ezzy-4/usbio.c
new file mode 100644
index 00000000000..954765d70fd
--- /dev/null
+++ b/arch/arm/boards/ezzy-4/usbio.c
@@ -0,0 +1,449 @@
+/*
+ * This file is part of fpdoom
+ * https://github.com/ilyakurdyukov/fpdoom/blob/main/fpdoom/usbio.c
+ */
+
+#include <stdint.h>
+#include <stddef.h>
+
+void *memcpy(void *dst, const void *src, size_t count);
+size_t strlen(const char *src);
+
+void usb_debug_ll_init(void);
+int usb_PUTC_LL(char ch);
+
+#define ALIGN(n) __attribute__((aligned(n)))
+
+#define readl(a) (*(volatile uint32_t *)(a))
+#define writel(v,a) (*(volatile uint32_t *)(a) = (v))
+
+#define MEM4(addr) *(volatile uint32_t*)(addr)
+
+#define READ32_BE(p) (uint32_t)( \
+ ((uint8_t*)(p))[0] << 24 | \
+ ((uint8_t*)(p))[1] << 16 | \
+ ((uint8_t*)(p))[2] << 8 | \
+ ((uint8_t*)(p))[3])
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+
+static inline uint32_t swap_be32(uint32_t v) {
+ uint32_t t = v >> 24 | v << 24, m = 0xff00;
+ return t | (v >> 8 & m) | (v & m) << 8;
+}
+#endif
+
+static unsigned fastchk16(unsigned crc, const void *src, int len)
+{
+ uint8_t *s = (uint8_t*)src;
+
+ while (len > 1) {
+ crc += s[1] << 8 | s[0]; s += 2;
+ len -= 2;
+ }
+
+ if (len)
+ crc += *s;
+
+ crc = (crc >> 16) + (crc & 0xffff);
+ crc += crc >> 16;
+
+ return crc & 0xffff;
+}
+
+enum {
+ HOST_CONNECT = 0x00,
+
+ CMD_MESSAGE = 0x80,
+ CMD_FOPEN = 0x81,
+ CMD_FREAD = 0x82,
+ CMD_FWRITE = 0x83,
+ CMD_FCLOSE = 0x84,
+ CMD_FSEEK = 0x85,
+ CMD_FTELL = 0x86,
+ CMD_GETARGS = 0x87,
+};
+
+#define CHECKSUM_INIT 0x5a5a
+#define USB_WAIT 1
+#define USB_NOWAIT 0
+
+#define USB_BASE_INIT
+#define USB_BASE 0x90000000
+
+#define USB_CR(o) MEM4(USB_BASE + o)
+
+#define USB_MAXREAD 64
+
+// not necessary, because USB is already
+// initialized by the bootloader
+#define INIT_USB 1
+
+#define USB_BUFSIZE 0x800
+
+#if (USB_BUFSIZE) & (USB_BUFSIZE - 1)
+#error
+#endif
+
+typedef struct {
+ uint32_t rpos, wpos;
+ uint8_t buf[USB_BUFSIZE];
+} usb_buf_t;
+
+usb_buf_t usb_buf;
+
+static const uint8_t dev_desc[] ALIGN(4) = {
+ 0x12, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x40,
+ 0x82, 0x17, 0x00, 0x4d, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x01
+};
+
+static const uint8_t config_desc[] ALIGN(4) = {
+ 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x00, 0xc0, 0x32,
+ 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00,
+ 0x07, 0x05, 0x83, 0x02, 0x40, 0x00, 0x00,
+ 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00
+};
+
+enum {
+ USB_CTRL = 0,
+ INT_STS = 0x18,
+ INT_CLR = 0x1c,
+ TIMEOUT_LMT = 0x28,
+
+ TR_SIZE_IN_ENDP0 = 0x40,
+ REQ_SETUP_LOW = 0x5c,
+ REQ_SETUP_HIGH = 0x60,
+ ENDP0_CTRL = 0x64,
+ INT_CTRL_ENDP0 = 0x68,
+ INT_STS_ENDP0 = 0x6c,
+ INT_CLR_ENDP0 = 0x70,
+
+ ENDP1_CTRL = 0xc0,
+ TRANS_SIZE_ENDP1 = 0xc8,
+ INT_CTRL_ENDP1 = 0xcc,
+ INT_STS_ENDP1 = 0xd0,
+ INT_CLR_ENDP1 = 0xd4,
+
+ ENDP2_CTRL = 0x100,
+ RCV_DATA_ENDP2 = 0x104,
+ INT_CTRL_ENDP2 = 0x10c,
+ INT_STS_ENDP2 = 0x110,
+ INT_CLR_ENDP2 = 0x114,
+
+ ENDP3_CTRL = 0x140,
+ TRANS_SIZE_ENDP3 = 0x148,
+ INT_CTRL_ENDP3 = 0x14c,
+ INT_STS_ENDP3 = 0x150,
+ INT_CLR_ENDP3 = 0x154,
+};
+
+#define FIFO_entry_endp0_in (uint32_t*)(USB_BASE + 0x80000)
+#define FIFO_entry_endp1 (FIFO_entry_endp0_in + 1)
+#define FIFO_entry_endp3 (FIFO_entry_endp0_in + 2)
+
+#define FIFO_entry_endp_out (uint32_t*)(USB_BASE + 0x8000c)
+#define FIFO_entry_endp2 (FIFO_entry_endp_out + 1)
+
+/* max packet size */
+#define USB_MAXPSIZE(o, n) \
+ (USB_CR(o) = (USB_CR(o) & ~0x7ff000) | (n) << 12)
+/* transfer size */
+#define USB_TRSIZE(o, n) \
+ (USB_CR(o) = (USB_CR(o) & ~0x1ffff) | (n))
+
+#if INIT_USB
+static void usb_init_endp0(void) {
+ USB_BASE_INIT
+ USB_MAXPSIZE(ENDP0_CTRL, 8);
+ USB_CR(INT_CLR_ENDP0) |= 1 << 8;
+ USB_CR(INT_CTRL_ENDP0) |= 1 << 8;
+ USB_CR(ENDP0_CTRL) |= 1 << 28; // buffer ready
+}
+
+static void usb_init_endp2(void) {
+ USB_BASE_INIT
+ USB_MAXPSIZE(ENDP2_CTRL, 0x40);
+ USB_TRSIZE(RCV_DATA_ENDP2, 0x2000);
+ USB_CR(INT_CLR_ENDP2) = 0x3fff;
+ USB_CR(INT_CTRL_ENDP2) = 0;
+ USB_CR(INT_CLR_ENDP2) |= 1;
+ USB_CR(INT_CTRL_ENDP2) |= 1;
+ USB_CR(ENDP2_CTRL) |= 1 << 25; // endpoint enable
+ USB_CR(ENDP2_CTRL) |= 1 << 28; // buffer ready
+}
+
+static void usb_init_endp3(void) {
+ USB_BASE_INIT
+ USB_MAXPSIZE(ENDP3_CTRL, 0x40);
+ USB_TRSIZE(TRANS_SIZE_ENDP3, 0x40);
+ USB_CR(INT_CLR_ENDP3) = 0x3fff;
+ USB_CR(INT_CTRL_ENDP3) = 0;
+ USB_CR(INT_CLR_ENDP3) |= 1 << 9;
+ USB_CR(INT_CTRL_ENDP3) |= 1 << 9;
+ USB_CR(ENDP3_CTRL) |= 1 << 25; // endpoint enable
+}
+#endif
+
+// len = 0..0x7ff
+static void usb_send(uint32_t ep, const void *src, uint32_t len) {
+ uint32_t i, ctrl, tr_size; uint32_t *fifo;
+ const uint32_t *s = (const uint32_t*)src;
+ USB_BASE_INIT
+ do {
+ if (ep == 0) {
+ ctrl = ENDP0_CTRL;
+ tr_size = TR_SIZE_IN_ENDP0;
+ fifo = FIFO_entry_endp0_in;
+ } else if (ep == 4) {
+ ctrl = ENDP3_CTRL;
+ tr_size = TRANS_SIZE_ENDP3;
+ fifo = FIFO_entry_endp3;
+ } else break;
+
+ USB_MAXPSIZE(ctrl, len);
+ USB_TRSIZE(tr_size, len);
+
+ for (i = 0; i < len; i += 4, s++)
+ *(volatile uint32_t*)fifo = READ32_BE(s);
+
+ USB_CR(ctrl) |= 1 << 27;
+
+ if (ep == 4) {
+ // TRANSFER_END
+ while ((USB_CR(INT_STS_ENDP3) & 1 << 9) == 0);
+ USB_CR(INT_CLR_ENDP3) |= 1 << 9;
+ }
+ } while (0);
+}
+
+static void usb_recv(uint32_t ep, uint32_t *dst, uint32_t len) {
+ uint32_t i, ctrl; uint32_t *fifo;
+ USB_BASE_INIT
+ do {
+ fifo = FIFO_entry_endp_out;
+ if (ep == 1) {
+ ctrl = ENDP0_CTRL;
+ } else if (ep == 3) {
+ ctrl = ENDP2_CTRL;
+ fifo += 1; // FIFO_entry_endp2
+ } else break;
+
+ for (i = 0; i < len; i += 8) {
+ *dst++ = swap_be32(*(volatile uint32_t*)fifo);
+ *dst++ = swap_be32(*(volatile uint32_t*)fifo);
+ }
+
+ USB_CR(ctrl) |= 1 << 28;
+ } while (0);
+}
+
+#define USB_REC_DEVICE 0
+#define USB_REC_INTERFACE 1
+#define USB_REC_MASK 0x1f
+
+#define USB_REQ_STANDARD (0 << 5)
+#define USB_REQ_CLASS (1 << 5)
+#define USB_REQ_VENDOR (2 << 5)
+#define USB_REQ_MASK (3 << 5)
+
+#define USB_REQUEST_GET_DESCRIPTOR 6
+
+#define USB_DEVICE_DESCRIPTOR_TYPE 1
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
+
+static void usb_send_desc(int type, int len) {
+ const void *p; int n;
+ if (type == USB_DEVICE_DESCRIPTOR_TYPE) {
+ p = dev_desc; n = sizeof(dev_desc);
+ } else if (type == USB_CONFIGURATION_DESCRIPTOR_TYPE) {
+ p = config_desc; n = sizeof(config_desc);
+ } else return;
+
+ if (len > n) len = n;
+ usb_send(0, p, len);
+}
+
+static void usb_int_endp0(void) {
+ uint32_t a, b, len, req;
+ USB_BASE_INIT
+ if (USB_CR(INT_STS_ENDP0) & 1 << 8) { // SETUP_TRANS_END
+ a = USB_CR(REQ_SETUP_LOW);
+ len = USB_CR(REQ_SETUP_HIGH) >> 16; // wLength
+ req = (a >> 8) & 0xff;
+
+ b = a & (USB_REC_MASK | USB_REQ_MASK);
+ if (b == (USB_REC_DEVICE | USB_REQ_STANDARD)) {
+ if (req == USB_REQUEST_GET_DESCRIPTOR)
+ usb_send_desc(a >> 24, len);
+ }
+ }
+ USB_CR(INT_CLR_ENDP0) = 0x3fff;
+}
+
+static void usb_int_endp2(void) {
+ usb_buf_t *p; int i, len, wpos;
+ USB_BASE_INIT
+ if (USB_CR(INT_STS_ENDP2) & 1) { // TRANSACTION_END
+ uint8_t buf[USB_MAXREAD];
+ len = USB_CR(ENDP2_CTRL) & (USB_BUFSIZE - 1);
+ if (len > USB_MAXREAD) len = USB_MAXREAD;
+ usb_recv(3, (uint32_t*)buf, len);
+ p = &usb_buf;
+ wpos = p->wpos;
+ for (i = 0; i < len; i++) {
+ p->buf[wpos++] = buf[i];
+ wpos &= (USB_BUFSIZE - 1);
+ }
+ p->wpos = wpos;
+ USB_CR(ENDP2_CTRL) |= 1 << 28;
+ }
+ USB_CR(INT_CLR_ENDP2) = 0x3fff;
+}
+
+static void usb_int_endp3(void) {
+ USB_BASE_INIT
+ USB_CR(INT_CLR_ENDP3) = 0x3fff;
+}
+
+static void usb_check_int(void) {
+ USB_BASE_INIT
+ if ( readl(0x80001004) & (1 << 5) /* SC6531(DA/E) */ ) {
+ int mask = USB_CR(INT_STS);
+ if (mask & 0x3fff) {
+ if (mask & 1 << 10) usb_int_endp2();
+ if (mask & 1 << 11) usb_int_endp3();
+ if (mask & 1 << 8) usb_int_endp0();
+ }
+ USB_CR(INT_CLR) = 0x7f;
+ }
+}
+
+static void usb_init(void) {
+ usb_buf_t *p = &usb_buf;
+ p->rpos = 0;
+ p->wpos = 0;
+
+#if INIT_USB
+ USB_CR(USB_CTRL) |= 1; // USB_ENABLE
+ usb_init_endp0();
+ usb_init_endp2();
+ usb_init_endp3();
+ // 12MHz / 15 = 800kHz
+ USB_CR(TIMEOUT_LMT) = 15;
+#endif
+}
+
+static int usb_read(void *dst, unsigned len, int wait) {
+ usb_buf_t *p = &usb_buf;
+ uint8_t *d = (uint8_t*)dst;
+ unsigned rpos, n, n2;
+
+ while (len) {
+ // usb_buf_free - 1 >= USB_MAXREAD
+ if (((p->rpos - p->wpos - 1) & (USB_BUFSIZE - 1)) >= USB_MAXREAD)
+ usb_check_int();
+
+ rpos = p->rpos;
+ n = (p->wpos - rpos) & (USB_BUFSIZE - 1);
+ if (n) {
+ if (n > len) n = len;
+ len -= n;
+ n2 = USB_BUFSIZE - rpos;
+ if (n <= n2) {
+ memcpy(d, p->buf + rpos, n);
+ } else {
+ memcpy(d, p->buf + rpos, n2);
+ memcpy(d + n2, p->buf, n - n2);
+ }
+ d += n;
+ p->rpos = (rpos + n) & (USB_BUFSIZE - 1);
+ } else if (!wait) break;
+ }
+ return d - (uint8_t*)dst;
+}
+
+static int usb_write(const void *src, unsigned len) {
+ const uint8_t *s = (const uint8_t*)src;
+ for (; len > USB_MAXREAD; len -= USB_MAXREAD) {
+ usb_send(4, s, USB_MAXREAD);
+ s += USB_MAXREAD;
+ }
+ if (len) {
+ if (len == USB_MAXREAD) {
+ len >>= 1;
+ usb_send(4, s, len);
+ s += len;
+ }
+ usb_send(4, s, len);
+ }
+ return s - (uint8_t*)src;
+}
+
+static void _debug_msg(const char *msg)
+{
+ union { uint8_t u8[4]; uint16_t u16[2]; } buf;
+ int len;
+ unsigned tmp;
+
+ len = strlen(msg);
+ if (len > 255)
+ len = 255;
+
+ tmp = CMD_MESSAGE | len << 8;
+ buf.u16[0] = tmp;
+
+ tmp += CHECKSUM_INIT;
+ tmp = fastchk16(tmp, msg, len);
+ buf.u16[1] = tmp;
+
+ usb_write(buf.u16, 4);
+ usb_write(msg, len);
+}
+
+int usb_PUTC_LL(char ch)
+{
+ union { uint8_t u8[6]; uint16_t u16[3]; } buf;
+ unsigned tmp;
+
+ size_t size = 1;
+ void *src;
+
+ // stdout: handle = 1
+ int handle = 1;
+
+ src = &ch;
+
+ tmp = CMD_FWRITE | handle << 8;
+ buf.u16[0] = tmp;
+ buf.u16[1] = size;
+ tmp += CHECKSUM_INIT + size;
+ tmp = fastchk16(tmp, src, size);
+ buf.u16[2] = tmp;
+ usb_write(buf.u16, 6);
+ usb_write(src, size);
+ usb_read(buf.u16, 2, USB_WAIT);
+
+ return buf.u16[0];
+}
+
+void usb_debug_ll_init(void)
+{
+ static const uint8_t fdl_ack[8] = {
+ 0x7e, 0, 0x80, 0, 0, 0xff, 0x7f, 0x7e };
+
+ usb_init();
+
+ usb_write(fdl_ack, sizeof(fdl_ack));
+
+ for (;;) {
+ char buf[4];
+
+ usb_read(buf, 1, USB_WAIT);
+
+ if (buf[0] == HOST_CONNECT)
+ break;
+ }
+
+ _debug_msg("debug_ll\n");
+}
diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c
index a481c4634d7..a92115eddd1 100644
--- a/arch/arm/cpu/uncompress.c
+++ b/arch/arm/cpu/uncompress.c
@@ -79,6 +79,13 @@ void __noreturn barebox_pbl_start(unsigned long membase, unsigned long memsize,
setup_c();
+ if (IS_ENABLED(CONFIG_ARCH_SC6531E) && IS_ENABLED(CONFIG_DEBUG_LL)) {
+ usb_debug_ll_init();
+
+ puts_ll("Hello world\n");
+ puts_ll("\n");
+ }
+
pr_debug("memory at 0x%08lx, size 0x%08lx\n", membase, memsize);
if (IS_ENABLED(CONFIG_MMU))
diff --git a/arch/arm/include/asm/debug_ll.h b/arch/arm/include/asm/debug_ll.h
index a1d5161ccf2..22628c5b4da 100644
--- a/arch/arm/include/asm/debug_ll.h
+++ b/arch/arm/include/asm/debug_ll.h
@@ -64,6 +64,8 @@
#include <mach/clps711x/debug_ll.h>
#elif defined CONFIG_ARCH_AT91
#include <mach/at91/debug_ll.h>
+#elif defined CONFIG_ARCH_SC6531E
+#include <mach/sc6531e/debug_ll.h>
#endif
#endif
diff --git a/include/mach/sc6531e/debug_ll.h b/include/mach/sc6531e/debug_ll.h
new file mode 100644
index 00000000000..82c22fba647
--- /dev/null
+++ b/include/mach/sc6531e/debug_ll.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/* SPDX-FileCopyrightText: 2023 Antony Pavlov <antonynpavlov@gmail.com> */
+
+#ifndef __MACH_SC6531E_DEBUG_LL_H__
+#define __MACH_SC6531E_DEBUG_LL_H__
+
+#include <io.h>
+
+void usb_debug_ll_init(void);
+int usb_PUTC_LL(char ch);
+
+static inline void PUTC_LL(char ch)
+{
+ usb_PUTC_LL(ch);
+}
+
+#endif /* __MACH_SC6531E_DEBUG_LL_H__ */
--
2.39.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [RFC 4/4] Documentation: add sc6531e instructions
2023-06-10 10:32 [RFC 0/4] Run barebox on sc6531e-based feature phone Antony Pavlov
` (2 preceding siblings ...)
2023-06-10 10:32 ` [RFC 3/4] sc6531e: add debug_ll support Antony Pavlov
@ 2023-06-10 10:32 ` Antony Pavlov
2023-07-04 12:03 ` [RFC 0/4] Run barebox on sc6531e-based feature phone Sascha Hauer
4 siblings, 0 replies; 7+ messages in thread
From: Antony Pavlov @ 2023-06-10 10:32 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
Documentation/boards/sc6531e.rst | 187 +++++++++++++++++++++++++++++++
1 file changed, 187 insertions(+)
diff --git a/Documentation/boards/sc6531e.rst b/Documentation/boards/sc6531e.rst
new file mode 100644
index 00000000000..cbda8b6def0
--- /dev/null
+++ b/Documentation/boards/sc6531e.rst
@@ -0,0 +1,187 @@
+SC6531E
+=======
+
+F+ Ezzy 4
+---------
+
+Barebox has limited support for the SC6531E-based feature phones::
+
+ ARCH=arm make ezzy-4_defconfig
+ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make
+
+The resulting ``./images/barebox.img`` can be loaded with
+``spd_dump`` utility::
+
+ git clone https://github.com/ilyakurdyukov/spreadtrum_flash
+ ( cd spreadtrum_flash && git log -1 --pretty='%h %s' && make )
+ 6886a85 Readme update about smartphones.
+
+ wget https://github.com/ilyakurdyukov/fpdoom/releases/download/1.20230513/fpdoom.zip
+ unzip fpdoom.zip nor_fdl1.bin
+
+ git clone https://github.com/ilyakurdyukov/fpdoom
+ ( cd fpdoom/libc_server && git log -1 --pretty='%h %s' && make )
+ cc90d2a faster usb io
+
+ ./spreadtrum_flash/spd_dump --wait 300 fdl nor_fdl1.bin 0x40004000 fdl images/barebox.img ram && ./fpdoom/libc_server/libc_server
+
+ BSL_REP_VER: "SPRD3\0"
+ BSL_REP_VER: "Custom FDL1: CHIP ID = 0x65620001\0"
+ + ./fpdoom/libc_server/libc_server
+ !!! debug_ll
+
+ Hello world
+
+ start.c: memory at 0x14000000, size 0x00400000
+ start.c: found DTB in boarddata, copying to 0x142ffe80
+ start.c: initializing malloc pool at 0x141ffe80 (size 0x00100000)
+ start.c: starting barebox...
+ initcall-> 0x143021fc
+ initcall-> 0x14307040
+ initcall-> 0x1430d598
+ initcall-> 0x1430dfd8
+ initcall-> 0x143263f4
+ initcall-> 0x1432a9c0
+ start.c: barebox_arm_boot_dtb: using barebox_boarddata
+ initcall-> 0x143012fc
+ initcall-> 0x143120f0
+ initcall-> 0x1432602c
+ initcall-> 0x14312060
+ initcall-> 0x14310844
+ initcall-> 0x14300058
+ initcall-> 0x14312390
+ initcall-> 0x14300590
+ initcall-> 0x1430bfe8
+ initcall-> 0x1430d6e4
+ initcall-> 0x143233fc
+ initcall-> 0x14324b7c
+ initcall-> 0x14325a10
+ initcall-> 0x14329c74
+ initcall-> 0x14301238
+ initcall-> 0x143090bc
+ initcall-> 0x14300dc8
+ initcall-> 0x143018ac
+ initcall-> 0x14304b8c
+ initcall-> 0x1430dbd0
+ initcall-> 0x1430de24
+ initcall-> 0x14312268
+ initcall-> 0x143127fc
+ initcall-> 0x143127bc
+ initcall-> 0x1431277c
+ initcall-> 0x1431273c
+ initcall-> 0x14323224
+ initcall-> 0x1432a228
+ initcall-> 0x143109ac
+ initcall-> 0x143000cc
+ initcall-> 0x14300b00
+ initcall-> 0x14303244
+ initcall-> 0x143049c0
+ initcall-> 0x14308588
+ malloc space: 0x141ffe80 -> 0x142ffe7f (size 1 MiB)
+ initcall-> 0x143088a0
+ initcall-> 0x1430b920
+ initcall-> 0x1430cf14
+ initcall-> 0x1430d794
+ initcall-> 0x14310fe4
+ initcall-> 0x1432af50
+ initcall-> 0x143012bc
+ environment load /dev/env0: No such file or directory
+ Maybe you have to create the partition.
+ initcalls done
+ Executing '/env/init/automount'...
+
+ barebox 2023.05.0-00182-g726a6ded65fc-dirty #1 Sat Jun 10 10:50:06 MSK 2023
+
+
+
+ Information commands:
+ ?, cpuinfo, devinfo, drvinfo, gpioinfo, help, iomem, meminfo, version
+ Boot commands:
+ boot, go
+ Partition commands:
+ automount
+ Environment commands:
+ export, global, nv, setenv
+ File commands:
+ basename, cat, cd, cp, digest, dirname, ll, ls, md5sum, mkdir, readlink, rm
+ rmdir, sha1sum
+ Scripting commands:
+ ., :, [, exit, false, getopt, let, msleep, sh, sleep, source, test, true
+ Console commands:
+ echo, edit, sedit, timeout, vi
+ Memory commands:
+ md, memcmp, memcpy, memset, memtest, mm, mw
+ Hardware manipulation commands:
+ gpio_direction_input, gpio_direction_output, gpio_get_value, gpio_set_value
+ led
+ Miscellaneous commands:
+ of_dump, of_node, of_property, oftree, time, uptime
+ Use 'help COMMAND' for more details.
+
+
+ implementer: ARM
+ architecture: v5TEJ
+ I-cache: 8192 bytes (linelen = 32)
+ D-cache: 8192 bytes (linelen = 32)
+ Control register: A W P D L I DT IT
+
+ 0x00000000 - 0xffffffff (size 0x00000000) iomem
+ 0x14000000 - 0x143fffff (size 0x00400000) ram0
+ 0x141ffe80 - 0x142ffe7f (size 0x00100000) malloc space
+ 0x142ffe80 - 0x142ffffe (size 0x0000017f) board data
+ 0x14300000 - 0x1433149f (size 0x000314a0) barebox
+ 0x143314a0 - 0x14333fbf (size 0x00002b20) barebox data
+ 0x14333fc0 - 0x14336973 (size 0x000029b4) bss
+ 0x143f0000 - 0x143f7fff (size 0x00008000) stack
+ 0x81003000 - 0x810030ff (size 0x00000100) 81003000.timer@81003000.of
+
+ Maximum system memory: 139648
+ Current system memory: 139648
+ in use: 136240
+
+ {
+ model = "F+ Ezzy 4";
+ compatible = "f+,ezzy-4";
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ chosen {
+ };
+ memory {
+ device_type = "memory";
+ reg = <0x14000000 0x400000>;
+ };
+ timer@81003000 {
+ compatible = "sc6531e-timer";
+ reg = <0x81003000 0x100>;
+ status = "okay";
+ };
+ };
+
+ Driver Device(s)
+ --------------------
+ sc6531e-timer
+ 81003000.timer@81003000.of
+ ramfs
+ ramfs0
+ devfs
+ devfs0
+ gpio-leds
+ mem
+ mem0
+ mem1
+
+ Use 'devinfo DEVICE' for more information
+
+ 1
+
+ sleep 0
+ sleep 1
+ sleep 2
+ sleep 3
+ Executing '/env/init/automount-ratp'...
+ Executing '/env/init/ps1'...
+
+ Hit any to stop autoboot: 0
+ Booting entry 'net'
+ ifup: No such file or directory
+ host: No such file or directory
--
2.39.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC 0/4] Run barebox on sc6531e-based feature phone
2023-06-10 10:32 [RFC 0/4] Run barebox on sc6531e-based feature phone Antony Pavlov
` (3 preceding siblings ...)
2023-06-10 10:32 ` [RFC 4/4] Documentation: add sc6531e instructions Antony Pavlov
@ 2023-07-04 12:03 ` Sascha Hauer
2023-07-05 9:37 ` Antony Pavlov
4 siblings, 1 reply; 7+ messages in thread
From: Sascha Hauer @ 2023-07-04 12:03 UTC (permalink / raw)
To: Antony Pavlov; +Cc: barebox, Ahmad Fatoum
Hi Antony,
This has stayed unanswered for some time.
I am not sure what I should do with it. In the current form I think it's
a bit too basic to be useful. Maybe we can add it once the LCD and
Keypad driver is ready?
Sascha
On Sat, Jun 10, 2023 at 01:32:16PM +0300, Antony Pavlov wrote:
> This patch series adds initial support for SC6531E chip.
>
> SC6431E chip is specially designed solution for creating
> feature phones. It contains
>
> * ARM926EJ-S core (up to 208 MHz)
> * embedded PSRAM
> * peripherals: USB, SPI, UART, IIS, PCM, I2C, keypad, LCD
> * SIM card and GSM/GPRS/FM/BT stuff
>
> This work is based on FPDoom, see [1], [2], [3] for details.
>
> At the moment only timer and debug_ll output via USB
> are supported.
>
> After adding lcd and keypad driver running bareDOOM [4]
> on SC6531E will be possible.
>
> [1] https://github.com/ilyakurdyukov/fpdoom
> [2] https://habr.com/ru/articles/706766/
> [3] https://www.youtube.com/watch?v=tln_Iace1O8
> [4] https://github.com/a3f/bareDOOM
>
> Antony Pavlov (4):
> clocksource: add sc6531e driver
> ARM: add sc6531e and F+ Ezzy 4 phone support
> sc6531e: add debug_ll support
> Documentation: add sc6531e instructions
>
> Documentation/boards/sc6531e.rst | 187 +++++++++
> arch/arm/Kconfig | 10 +
> arch/arm/Makefile | 1 +
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/ezzy-4/Makefile | 6 +
> arch/arm/boards/ezzy-4/env/init/automount | 27 ++
> arch/arm/boards/ezzy-4/lowlevel.c | 19 +
> arch/arm/boards/ezzy-4/usbio.c | 449 ++++++++++++++++++++++
> arch/arm/configs/ezzy-4_defconfig | 49 +++
> arch/arm/cpu/uncompress.c | 7 +
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/ezzy-4.dts | 22 ++
> arch/arm/include/asm/debug_ll.h | 2 +
> arch/arm/mach-sc6531e/Kconfig | 17 +
> arch/arm/mach-sc6531e/Makefile | 3 +
> drivers/clocksource/Makefile | 1 +
> drivers/clocksource/timer-sc6531e.c | 70 ++++
> include/mach/sc6531e/debug_ll.h | 17 +
> 18 files changed, 889 insertions(+)
> create mode 100644 Documentation/boards/sc6531e.rst
> create mode 100644 arch/arm/boards/ezzy-4/Makefile
> create mode 100644 arch/arm/boards/ezzy-4/env/init/automount
> create mode 100644 arch/arm/boards/ezzy-4/lowlevel.c
> create mode 100644 arch/arm/boards/ezzy-4/usbio.c
> create mode 100644 arch/arm/configs/ezzy-4_defconfig
> create mode 100644 arch/arm/dts/ezzy-4.dts
> create mode 100644 arch/arm/mach-sc6531e/Kconfig
> create mode 100644 arch/arm/mach-sc6531e/Makefile
> create mode 100644 drivers/clocksource/timer-sc6531e.c
> create mode 100644 include/mach/sc6531e/debug_ll.h
>
> --
> 2.39.0
>
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC 0/4] Run barebox on sc6531e-based feature phone
2023-07-04 12:03 ` [RFC 0/4] Run barebox on sc6531e-based feature phone Sascha Hauer
@ 2023-07-05 9:37 ` Antony Pavlov
0 siblings, 0 replies; 7+ messages in thread
From: Antony Pavlov @ 2023-07-05 9:37 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox, Ahmad Fatoum
On Tue, 4 Jul 2023 14:03:56 +0200
Sascha Hauer <s.hauer@pengutronix.de> wrote:
> Hi Antony,
>
> This has stayed unanswered for some time.
>
> I am not sure what I should do with it. In the current form I think it's
> a bit too basic to be useful. Maybe we can add it once the LCD and
> Keypad driver is ready?
It's just RFC. With LCD and keypad support SC6531E barebox port will be a nice
demo for barebox presentation and can be added to mainline repo.
There are some ready-to-use SC6531E drivers in the https://github.com/strongtz/linux-sprd repo.
LCD display is connected via SPI so drivers/spi/spi-sprd.c can be used,
also we need backlight driver.
Keypad is supported by drivers/input/keyboard/sprd_keypad.c.
> Sascha
>
> On Sat, Jun 10, 2023 at 01:32:16PM +0300, Antony Pavlov wrote:
> > This patch series adds initial support for SC6531E chip.
> >
> > SC6431E chip is specially designed solution for creating
> > feature phones. It contains
> >
> > * ARM926EJ-S core (up to 208 MHz)
> > * embedded PSRAM
> > * peripherals: USB, SPI, UART, IIS, PCM, I2C, keypad, LCD
> > * SIM card and GSM/GPRS/FM/BT stuff
> >
> > This work is based on FPDoom, see [1], [2], [3] for details.
> >
> > At the moment only timer and debug_ll output via USB
> > are supported.
> >
> > After adding lcd and keypad driver running bareDOOM [4]
> > on SC6531E will be possible.
> >
> > [1] https://github.com/ilyakurdyukov/fpdoom
> > [2] https://habr.com/ru/articles/706766/
> > [3] https://www.youtube.com/watch?v=tln_Iace1O8
> > [4] https://github.com/a3f/bareDOOM
> >
> > Antony Pavlov (4):
> > clocksource: add sc6531e driver
> > ARM: add sc6531e and F+ Ezzy 4 phone support
> > sc6531e: add debug_ll support
> > Documentation: add sc6531e instructions
> >
> > Documentation/boards/sc6531e.rst | 187 +++++++++
> > arch/arm/Kconfig | 10 +
> > arch/arm/Makefile | 1 +
> > arch/arm/boards/Makefile | 1 +
> > arch/arm/boards/ezzy-4/Makefile | 6 +
> > arch/arm/boards/ezzy-4/env/init/automount | 27 ++
> > arch/arm/boards/ezzy-4/lowlevel.c | 19 +
> > arch/arm/boards/ezzy-4/usbio.c | 449 ++++++++++++++++++++++
> > arch/arm/configs/ezzy-4_defconfig | 49 +++
> > arch/arm/cpu/uncompress.c | 7 +
> > arch/arm/dts/Makefile | 1 +
> > arch/arm/dts/ezzy-4.dts | 22 ++
> > arch/arm/include/asm/debug_ll.h | 2 +
> > arch/arm/mach-sc6531e/Kconfig | 17 +
> > arch/arm/mach-sc6531e/Makefile | 3 +
> > drivers/clocksource/Makefile | 1 +
> > drivers/clocksource/timer-sc6531e.c | 70 ++++
> > include/mach/sc6531e/debug_ll.h | 17 +
> > 18 files changed, 889 insertions(+)
> > create mode 100644 Documentation/boards/sc6531e.rst
> > create mode 100644 arch/arm/boards/ezzy-4/Makefile
> > create mode 100644 arch/arm/boards/ezzy-4/env/init/automount
> > create mode 100644 arch/arm/boards/ezzy-4/lowlevel.c
> > create mode 100644 arch/arm/boards/ezzy-4/usbio.c
> > create mode 100644 arch/arm/configs/ezzy-4_defconfig
> > create mode 100644 arch/arm/dts/ezzy-4.dts
> > create mode 100644 arch/arm/mach-sc6531e/Kconfig
> > create mode 100644 arch/arm/mach-sc6531e/Makefile
> > create mode 100644 drivers/clocksource/timer-sc6531e.c
> > create mode 100644 include/mach/sc6531e/debug_ll.h
> >
> > --
> > 2.39.0
> >
> >
>
> --
> Pengutronix e.K. | |
> Steuerwalder Str. 21 | http://www.pengutronix.de/ |
> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
--
Best regards,
Antony Pavlov
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-07-05 9:33 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-10 10:32 [RFC 0/4] Run barebox on sc6531e-based feature phone Antony Pavlov
2023-06-10 10:32 ` [RFC 1/4] clocksource: add sc6531e driver Antony Pavlov
2023-06-10 10:32 ` [RFC 2/4] ARM: add sc6531e and F+ Ezzy 4 phone support Antony Pavlov
2023-06-10 10:32 ` [RFC 3/4] sc6531e: add debug_ll support Antony Pavlov
2023-06-10 10:32 ` [RFC 4/4] Documentation: add sc6531e instructions Antony Pavlov
2023-07-04 12:03 ` [RFC 0/4] Run barebox on sc6531e-based feature phone Sascha Hauer
2023-07-05 9:37 ` Antony Pavlov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox