menu
ABOUT THE GAME FEATURES COMPANIONS
close
ABOUT THE GAME FEATURES COMPANIONS
The first isometric party-based computer RPG set in the Pathfinder fantasy universe
video WATCH VIDEO

VPU_REG_DEC_CTRL (0xF100_0000) VPU_REG_STATUS (0xF100_0004) // bit 0 = busy VPU_REG_DATA (0xF100_0008) // firmware mailbox Driver requests gx_vpu_fw.bin from /lib/firmware . Missing firmware → VPU fails to start.

struct gx_disp *disp = dev_id; u32 status = readl(disp->base + DISP_IRQ_STS); if (status & DISP_IRQ_VSYNC) writel(DISP_IRQ_VSYNC, disp->base + DISP_IRQ_STS); drm_crtc_handle_vblank(&disp->crtc); return IRQ_HANDLED;

Userspace (GStreamer V4L2) → ioctl(VIDIOC_QBUF) → driver copies bitstream to SRAM/CMA → triggers VPU via mailbox → VPU interrupts on frame done → driver queues decoded frame to capture buffer.

If you can avoid GX for a new design, do so. If you're stuck, copy working register dumps from a known-good Android build and compare to your driver’s init sequence.

gx_i2c: bus stuck → Implement i2c recovery (toggle SCL 9 times manually).

gx_mem: allocation failed (size=4194304) → Increase CMA size in bootargs: cma=384M or adjust per-pool sizes in device tree. 7. Device Tree Bindings (Example for GX350) &gx_vpu compatible = "nationalchip,gx350-vpu"; reg = <0x0 0xf1000000 0x0 0x4000>; interrupts = <0 33 4>; clocks = <&clkc GX350_CLK_VPU>, <&clkc GX350_CLK_VPU_AXI>; clock-names = "core", "bus"; firmware-name = "gx_vpu_fw.bin"; memory-region = <&vpu_mem>; ; &gx_disp compatible = "nationalchip,gx350-disp"; reg = <0x0 0xf0000000 0x0 0x2000>; interrupts = <0 25 4>; ports disp_out: endpoint remote-endpoint = <&hdmi_in>; ; ; ;

#define I2C_CON 0x00 #define I2C_TAR 0x04 #define I2C_DATA_CMD 0x10 #define I2C_ENABLE 0x6C static inline void gx_i2c_writel(struct gx_i2c *i2c, u32 val, u32 reg)

can occur if status register is not cleared exactly once. 6. Debugging GX Drivers Without Vendor Support 6.1 Tools & Methods | Tool | Purpose | |------|---------| | devmem2 | Read/write raw registers (e.g., devmem2 0xF0000020 ) | | strace | Trace ioctl calls to DRM/V4L2 | | dmesg -w | Watch driver prints (enable with DYNAMIC_DEBUG ) | | cat /sys/kernel/debug/dri/*/state | DRM state | | gdb + KGDB | Kernel debugging over serial | 6.2 Common Errors & Fixes Error: gx_vpu: timeout waiting for interrupt → Check VPU clock (is it enabled?), firmware loaded? Try clk_enable(vpu_clk) .

writel_relaxed(val, i2c->base + reg);

Manually gate unused clocks via /sys/kernel/debug/clk/clk_summary and write to clk_disable .

struct gx_mem_region phys_addr_t start; size_t size; void *cookie; struct list_head list; ; // Allocation from reserved CMA pool void *gx_mem_alloc(size_t size, u32 align); void gx_mem_free(void *handle);

GX PM is notoriously minimal : only suspend/resume for system sleep, no runtime PM. Causes high idle power.

THE MAJOR FEATURES
features
features features
COMPANION FOCUSED STORY
Experience the adventure alongside living and breathing companions, each with deep stories and decisions of their own. Love them, adore them or hate them for who they are.
features
features features
CHARACTER DEVELOPMENT
Customize your character and companions with a multitude of options available in Pathfinder to make the perfect party capable of overcoming insurmountable challenges.
features
features features
KINGDOM
Establish your kingdom in Stolen Lands, claim new territories, and build towns and cities. Be a wise ruler or a heavy-handed tyrant.

Gx Chip Driver Access

VPU_REG_DEC_CTRL (0xF100_0000) VPU_REG_STATUS (0xF100_0004) // bit 0 = busy VPU_REG_DATA (0xF100_0008) // firmware mailbox Driver requests gx_vpu_fw.bin from /lib/firmware . Missing firmware → VPU fails to start.

struct gx_disp *disp = dev_id; u32 status = readl(disp->base + DISP_IRQ_STS); if (status & DISP_IRQ_VSYNC) writel(DISP_IRQ_VSYNC, disp->base + DISP_IRQ_STS); drm_crtc_handle_vblank(&disp->crtc); return IRQ_HANDLED;

Userspace (GStreamer V4L2) → ioctl(VIDIOC_QBUF) → driver copies bitstream to SRAM/CMA → triggers VPU via mailbox → VPU interrupts on frame done → driver queues decoded frame to capture buffer.

If you can avoid GX for a new design, do so. If you're stuck, copy working register dumps from a known-good Android build and compare to your driver’s init sequence. gx chip driver

gx_i2c: bus stuck → Implement i2c recovery (toggle SCL 9 times manually).

gx_mem: allocation failed (size=4194304) → Increase CMA size in bootargs: cma=384M or adjust per-pool sizes in device tree. 7. Device Tree Bindings (Example for GX350) &gx_vpu compatible = "nationalchip,gx350-vpu"; reg = <0x0 0xf1000000 0x0 0x4000>; interrupts = <0 33 4>; clocks = <&clkc GX350_CLK_VPU>, <&clkc GX350_CLK_VPU_AXI>; clock-names = "core", "bus"; firmware-name = "gx_vpu_fw.bin"; memory-region = <&vpu_mem>; ; &gx_disp compatible = "nationalchip,gx350-disp"; reg = <0x0 0xf0000000 0x0 0x2000>; interrupts = <0 25 4>; ports disp_out: endpoint remote-endpoint = <&hdmi_in>; ; ; ;

#define I2C_CON 0x00 #define I2C_TAR 0x04 #define I2C_DATA_CMD 0x10 #define I2C_ENABLE 0x6C static inline void gx_i2c_writel(struct gx_i2c *i2c, u32 val, u32 reg) If you can avoid GX for a new design, do so

can occur if status register is not cleared exactly once. 6. Debugging GX Drivers Without Vendor Support 6.1 Tools & Methods | Tool | Purpose | |------|---------| | devmem2 | Read/write raw registers (e.g., devmem2 0xF0000020 ) | | strace | Trace ioctl calls to DRM/V4L2 | | dmesg -w | Watch driver prints (enable with DYNAMIC_DEBUG ) | | cat /sys/kernel/debug/dri/*/state | DRM state | | gdb + KGDB | Kernel debugging over serial | 6.2 Common Errors & Fixes Error: gx_vpu: timeout waiting for interrupt → Check VPU clock (is it enabled?), firmware loaded? Try clk_enable(vpu_clk) .

writel_relaxed(val, i2c->base + reg);

Manually gate unused clocks via /sys/kernel/debug/clk/clk_summary and write to clk_disable . base + reg)

struct gx_mem_region phys_addr_t start; size_t size; void *cookie; struct list_head list; ; // Allocation from reserved CMA pool void *gx_mem_alloc(size_t size, u32 align); void gx_mem_free(void *handle);

GX PM is notoriously minimal : only suspend/resume for system sleep, no runtime PM. Causes high idle power.

We use cookies on this website
You can read more about it in the Cookie Policy.