/*
* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope 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.
*/
#include <linux/delay.h>
#include <nvgpu/bios.h>
#include <nvgpu/kmem.h>
#include "gk20a/gk20a.h"
#include "gk20a/pmu_gk20a.h"
#ifdef CONFIG_DEBUG_FS
#include "gk20a/platform_gk20a.h"
#endif
#include <nvgpu/hw/gk20a/hw_pwr_gk20a.h>
#include <nvgpu/hw/gp106/hw_fb_gp106.h>
#define VREG_COUNT 24
struct memory_link_training_pattern {
u32 regaddr;
u32 writeval;
};
static struct memory_link_training_pattern memory_pattern_reglist[] = {
{0x9a0968, 0x0},
{0x9a0920, 0x0},
{0x9a0918, 0x0},
{0x9a0920, 0x100},
{0x9a0918, 0x0},
{0x9a096c, 0x0},
{0x9a0924, 0x0},
{0x9a091c, 0x0},
{0x9a0924, 0x100},
{0x9a091c, 0x0},
{0x9a0968, 0x100},
{0x9a0920, 0xff},
{0x9a0918, 0xffffffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffffffff},
{0x9a096c, 0x100},
{0x9a0924, 0xff},
{0x9a091c, 0xffffffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffffffff},
{0x9a0968, 0x200},
{0x9a0920, 0xff},
{0x9a0918, 0x55555555},
{0x9a0920, 0x1ff},
{0x9a0918, 0x55555555},
{0x9a096c, 0x200},
{0x9a0924, 0xff},
{0x9a091c, 0x55555555},
{0x9a0924, 0x1ff},
{0x9a091c, 0x55555555},
{0x9a0968, 0x300},
{0x9a0920, 0x0},
{0x9a0918, 0xaaaaaaaa},
{0x9a0920, 0x100},
{0x9a0918, 0xaaaaaaaa},
{0x9a096c, 0x300},
{0x9a0924, 0x0},
{0x9a091c, 0xaaaaaaaa},
{0x9a0924, 0x100},
{0x9a091c, 0xaaaaaaaa},
{0x9a0968, 0x400},
{0x9a0920, 0xff},
{0x9a0918, 0x33333333},
{0x9a0920, 0x1ff},
{0x9a0918, 0x33333333},
{0x9a096c, 0x400},
{0x9a0924, 0xff},
{0x9a091c, 0x33333333},
{0x9a0924, 0x1ff},
{0x9a091c, 0x33333333},
{0x9a0968, 0x500},
{0x9a0920, 0x0},
{0x9a0918, 0xcccccccc},
{0x9a0920, 0x100},
{0x9a0918, 0xcccccccc},
{0x9a096c, 0x500},
{0x9a0924, 0x0},
{0x9a091c, 0xcccccccc},
{0x9a0924, 0x100},
{0x9a091c, 0xcccccccc},
{0x9a0968, 0x600},
{0x9a0920, 0x0},
{0x9a0918, 0xf0f0f0f0},
{0x9a0920, 0x100},
{0x9a0918, 0xf0f0f0f0},
{0x9a096c, 0x600},
{0x9a0924, 0x0},
{0x9a091c, 0xf0f0f0f0},
{0x9a0924, 0x100},
{0x9a091c, 0xf0f0f0f0},
{0x9a0968, 0x700},
{0x9a0920, 0xff},
{0x9a0918, 0xf0f0f0f},
{0x9a0920, 0x1ff},
{0x9a0918, 0xf0f0f0f},
{0x9a096c, 0x700},
{0x9a0924, 0xff},
{0x9a091c, 0xf0f0f0f},
{0x9a0924, 0x1ff},
{0x9a091c, 0xf0f0f0f},
{0x9a0968, 0x800},
{0x9a0920, 0xff},
{0x9a0918, 0xff00ff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xff00ff},
{0x9a096c, 0x800},
{0x9a0924, 0xff},
{0x9a091c, 0xff00ff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xff00ff},
{0x9a0968, 0x900},
{0x9a0920, 0x0},
{0x9a0918, 0xff00ff00},
{0x9a0920, 0x100},
{0x9a0918, 0xff00ff00},
{0x9a096c, 0x900},
{0x9a0924, 0x0},
{0x9a091c, 0xff00ff00},
{0x9a0924, 0x100},
{0x9a091c, 0xff00ff00},
{0x9a0968, 0xa00},
{0x9a0920, 0xff},
{0x9a0918, 0xffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffff},
{0x9a096c, 0xa00},
{0x9a0924, 0xff},
{0x9a091c, 0xffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffff},
{0x9a0968, 0xb00},
{0x9a0920, 0x0},
{0x9a0918, 0xffff0000},
{0x9a0920, 0x100},
{0x9a0918, 0xffff0000},
{0x9a096c, 0xb00},
{0x9a0924, 0x0},
{0x9a091c, 0xffff0000},
{0x9a0924, 0x100},
{0x9a091c, 0xffff0000},
{0x9a0968, 0xc00},
{0x9a0920, 0x0},
{0x9a0918, 0x0},
{0x9a0920, 0x100},
{0x9a0918, 0x0},
{0x9a096c, 0xc00},
{0x9a0924, 0x0},
{0x9a091c, 0x0},
{0x9a0924, 0x100},
{0x9a091c, 0x0},
{0x9a0968, 0xd00},
{0x9a0920, 0xff},
{0x9a0918, 0xffffffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffffffff},
{0x9a096c, 0xd00},
{0x9a0924, 0xff},
{0x9a091c, 0xffffffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffffffff},
{0x9a0968, 0xe00},
{0x9a0920, 0xff},
{0x9a0918, 0x55555555},
{0x9a0920, 0x1ff},
{0x9a0918, 0x55555555},
{0x9a096c, 0xe00},
{0x9a0924, 0xff},
{0x9a091c, 0x55555555},
{0x9a0924, 0x1ff},
{0x9a091c, 0x55555555},
{0x9a0968, 0xf00},
{0x9a0920, 0x0},
{0x9a0918, 0xaaaaaaaa},
{0x9a0920, 0x100},
{0x9a0918, 0xaaaaaaaa},
{0x9a096c, 0xf00},
{0x9a0924, 0x0},
{0x9a091c, 0xaaaaaaaa},
{0x9a0924, 0x100},
{0x9a091c, 0xaaaaaaaa},
{0x9a0968, 0x1000},
{0x9a0920, 0xff},
{0x9a0918, 0x33333333},
{0x9a0920, 0x1ff},
{0x9a0918, 0x33333333},
{0x9a096c, 0x1000},
{0x9a0924, 0xff},
{0x9a091c, 0x33333333},
{0x9a0924, 0x1ff},
{0x9a091c, 0x33333333},
{0x9a0968, 0x1100},
{0x9a0920, 0x0},
{0x9a0918, 0xcccccccc},
{0x9a0920, 0x100},
{0x9a0918, 0xcccccccc},
{0x9a096c, 0x1100},
{0x9a0924, 0x0},
{0x9a091c, 0xcccccccc},
{0x9a0924, 0x100},
{0x9a091c, 0xcccccccc},
{0x9a0968, 0x1200},
{0x9a0920, 0x0},
{0x9a0918, 0xf0f0f0f0},
{0x9a0920, 0x100},
{0x9a0918, 0xf0f0f0f0},
{0x9a096c, 0x1200},
{0x9a0924, 0x0},
{0x9a091c, 0xf0f0f0f0},
{0x9a0924, 0x100},
{0x9a091c, 0xf0f0f0f0},
{0x9a0968, 0x1300},
{0x9a0920, 0xff},
{0x9a0918, 0xf0f0f0f},
{0x9a0920, 0x1ff},
{0x9a0918, 0xf0f0f0f},
{0x9a096c, 0x1300},
{0x9a0924, 0xff},
{0x9a091c, 0xf0f0f0f},
{0x9a0924, 0x1ff},
{0x9a091c, 0xf0f0f0f},
{0x9a0968, 0x1400},
{0x9a0920, 0xff},
{0x9a0918, 0xff00ff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xff00ff},
{0x9a096c, 0x1400},
{0x9a0924, 0xff},
{0x9a091c, 0xff00ff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xff00ff},
{0x9a0968, 0x1500},
{0x9a0920, 0x0},
{0x9a0918, 0xff00ff00},
{0x9a0920, 0x100},
{0x9a0918, 0xff00ff00},
{0x9a096c, 0x1500},
{0x9a0924, 0x0},
{0x9a091c, 0xff00ff00},
{0x9a0924, 0x100},
{0x9a091c, 0xff00ff00},
{0x9a0968, 0x1600},
{0x9a0920, 0xff},
{0x9a0918, 0xffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffff},
{0x9a096c, 0x1600},
{0x9a0924, 0xff},
{0x9a091c, 0xffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffff},
{0x9a0968, 0x1700},
{0x9a0920, 0x0},
{0x9a0918, 0xffff0000},
{0x9a0920, 0x100},
{0x9a0918, 0xffff0000},
{0x9a096c, 0x1700},
{0x9a0924, 0x0},
{0x9a091c, 0xffff0000},
{0x9a0924, 0x100},
{0x9a091c, 0xffff0000},
{0x9a0968, 0x1800},
{0x9a0920, 0x0},
{0x9a0918, 0x0},
{0x9a0920, 0x100},
{0x9a0918, 0x0},
{0x9a096c, 0x1800},
{0x9a0924, 0x0},
{0x9a091c, 0x0},
{0x9a0924, 0x100},
{0x9a091c, 0x0},
{0x9a0968, 0x1900},
{0x9a0920, 0xff},
{0x9a0918, 0xffffffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffffffff},
{0x9a096c, 0x1900},
{0x9a0924, 0xff},
{0x9a091c, 0xffffffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffffffff},
{0x9a0968, 0x1a00},
{0x9a0920, 0xff},
{0x9a0918, 0x55555555},
{0x9a0920, 0x1ff},
{0x9a0918, 0x55555555},
{0x9a096c, 0x1a00},
{0x9a0924, 0xff},
{0x9a091c, 0x55555555},
{0x9a0924, 0x1ff},
{0x9a091c, 0x55555555},
{0x9a0968, 0x1b00},
{0x9a0920, 0x0},
{0x9a0918, 0xaaaaaaaa},
{0x9a0920, 0x100},
{0x9a0918, 0xaaaaaaaa},
{0x9a096c, 0x1b00},
{0x9a0924, 0x0},
{0x9a091c, 0xaaaaaaaa},
{0x9a0924, 0x100},
{0x9a091c, 0xaaaaaaaa},
{0x9a0968, 0x1c00},
{0x9a0920, 0xff},
{0x9a0918, 0x33333333},
{0x9a0920, 0x1ff},
{0x9a0918, 0x33333333},
{0x9a096c, 0x1c00},
{0x9a0924, 0xff},
{0x9a091c, 0x33333333},
{0x9a0924, 0x1ff},
{0x9a091c, 0x33333333},
{0x9a0968, 0x1d00},
{0x9a0920, 0x0},
{0x9a0918, 0xcccccccc},
{0x9a0920, 0x100},
{0x9a0918, 0xcccccccc},
{0x9a096c, 0x1d00},
{0x9a0924, 0x0},
{0x9a091c, 0xcccccccc},
{0x9a0924, 0x100},
{0x9a091c, 0xcccccccc},
{0x9a0968, 0x1e00},
{0x9a0920, 0x0},
{0x9a0918, 0xf0f0f0f0},
{0x9a0920, 0x100},
{0x9a0918, 0xf0f0f0f0},
{0x9a096c, 0x1e00},
{0x9a0924, 0x0},
{0x9a091c, 0xf0f0f0f0},
{0x9a0924, 0x100},
{0x9a091c, 0xf0f0f0f0},
{0x9a0968, 0x1f00},
{0x9a0920, 0xff},
{0x9a0918, 0xf0f0f0f},
{0x9a0920, 0x1ff},
{0x9a0918, 0xf0f0f0f},
{0x9a096c, 0x1f00},
{0x9a0924, 0xff},
{0x9a091c, 0xf0f0f0f},
{0x9a0924, 0x1ff},
{0x9a091c, 0xf0f0f0f},
{0x9a0968, 0x2000},
{0x9a0920, 0xff},
{0x9a0918, 0xff00ff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xff00ff},
{0x9a096c, 0x2000},
{0x9a0924, 0xff},
{0x9a091c, 0xff00ff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xff00ff},
{0x9a0968, 0x2100},
{0x9a0920, 0x0},
{0x9a0918, 0xff00ff00},
{0x9a0920, 0x100},
{0x9a0918, 0xff00ff00},
{0x9a096c, 0x2100},
{0x9a0924, 0x0},
{0x9a091c, 0xff00ff00},
{0x9a0924, 0x100},
{0x9a091c, 0xff00ff00},
{0x9a0968, 0x2200},
{0x9a0920, 0xff},
{0x9a0918, 0xffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffff},
{0x9a096c, 0x2200},
{0x9a0924, 0xff},
{0x9a091c, 0xffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffff},
{0x9a0968, 0x2300},
{0x9a0920, 0x0},
{0x9a0918, 0xffff0000},
{0x9a0920, 0x100},
{0x9a0918, 0xffff0000},
{0x9a096c, 0x2300},
{0x9a0924, 0x0},
{0x9a091c, 0xffff0000},
{0x9a0924, 0x100},
{0x9a091c, 0xffff0000},
{0x9a0968, 0x2400},
{0x9a0920, 0x0},
{0x9a0918, 0x0},
{0x9a0920, 0x100},
{0x9a0918, 0x0},
{0x9a096c, 0x2400},
{0x9a0924, 0x0},
{0x9a091c, 0x0},
{0x9a0924, 0x100},
{0x9a091c, 0x0},
{0x9a0968, 0x2500},
{0x9a0920, 0xff},
{0x9a0918, 0xffffffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffffffff},
{0x9a096c, 0x2500},
{0x9a0924, 0xff},
{0x9a091c, 0xffffffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffffffff},
{0x9a0968, 0x2600},
{0x9a0920, 0xff},
{0x9a0918, 0x55555555},
{0x9a0920, 0x1ff},
{0x9a0918, 0x55555555},
{0x9a096c, 0x2600},
{0x9a0924, 0xff},
{0x9a091c, 0x55555555},
{0x9a0924, 0x1ff},
{0x9a091c, 0x55555555},
{0x9a0968, 0x2700},
{0x9a0920, 0x0},
{0x9a0918, 0xaaaaaaaa},
{0x9a0920, 0x100},
{0x9a0918, 0xaaaaaaaa},
{0x9a096c, 0x2700},
{0x9a0924, 0x0},
{0x9a091c, 0xaaaaaaaa},
{0x9a0924, 0x100},
{0x9a091c, 0xaaaaaaaa},
{0x9a0968, 0x2800},
{0x9a0920, 0xff},
{0x9a0918, 0x33333333},
{0x9a0920, 0x1ff},
{0x9a0918, 0x33333333},
{0x9a096c, 0x2800},
{0x9a0924, 0xff},
{0x9a091c, 0x33333333},
{0x9a0924, 0x1ff},
{0x9a091c, 0x33333333},
{0x9a0968, 0x2900},
{0x9a0920, 0x0},
{0x9a0918, 0xcccccccc},
{0x9a0920, 0x100},
{0x9a0918, 0xcccccccc},
{0x9a096c, 0x2900},
{0x9a0924, 0x0},
{0x9a091c, 0xcccccccc},
{0x9a0924, 0x100},
{0x9a091c, 0xcccccccc},
{0x9a0968, 0x2a00},
{0x9a0920, 0x0},
{0x9a0918, 0xf0f0f0f0},
{0x9a0920, 0x100},
{0x9a0918, 0xf0f0f0f0},
{0x9a096c, 0x2a00},
{0x9a0924, 0x0},
{0x9a091c, 0xf0f0f0f0},
{0x9a0924, 0x100},
{0x9a091c, 0xf0f0f0f0},
{0x9a0968, 0x2b00},
{0x9a0920, 0xff},
{0x9a0918, 0xf0f0f0f},
{0x9a0920, 0x1ff},
{0x9a0918, 0xf0f0f0f},
{0x9a096c, 0x2b00},
{0x9a0924, 0xff},
{0x9a091c, 0xf0f0f0f},
{0x9a0924, 0x1ff},
{0x9a091c, 0xf0f0f0f},
{0x9a0968, 0x2c00},
{0x9a0920, 0xff},
{0x9a0918, 0xff00ff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xff00ff},
{0x9a096c, 0x2c00},
{0x9a0924, 0xff},
{0x9a091c, 0xff00ff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xff00ff},
{0x9a0968, 0x2d00},
{0x9a0920, 0x0},
{0x9a0918, 0xff00ff00},
{0x9a0920, 0x100},
{0x9a0918, 0xff00ff00},
{0x9a096c, 0x2d00},
{0x9a0924, 0x0},
{0x9a091c, 0xff00ff00},
{0x9a0924, 0x100},
{0x9a091c, 0xff00ff00},
{0x9a0968, 0x2e00},
{0x9a0920, 0xff},
{0x9a0918, 0xffff},
{0x9a0920, 0x1ff},
{0x9a0918, 0xffff},
{0x9a096c, 0x2e00},
{0x9a0924, 0xff},
{0x9a091c, 0xffff},
{0x9a0924, 0x1ff},
{0x9a091c, 0xffff},
{0x9a0968, 0x2f00},
{0x9a0920, 0x0},
{0x9a0918, 0xffff0000},
{0x9a0920, 0x100},
{0x9a0918, 0xffff0000},
{0x9a096c, 0x2f00},
{0x9a0924, 0x0},
{0x9a091c, 0xffff0000},
{0x9a0924, 0x100},
{0x9a091c, 0xffff0000},
{0x9a0968, 0x0},
{0x9a0900, 0x0},
{0x9a0968, 0x1},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x2},
{0x9a0900, 0x0},
{0x9a0968, 0x3},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x4},
{0x9a0900, 0x0},
{0x9a0968, 0x5},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x6},
{0x9a0900, 0x0},
{0x9a0968, 0x7},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x8},
{0x9a0900, 0x0},
{0x9a0968, 0x9},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xa},
{0x9a0900, 0x0},
{0x9a0968, 0xb},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xc},
{0x9a0900, 0x0},
{0x9a0968, 0xd},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xe},
{0x9a0900, 0x0},
{0x9a0968, 0xf},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x10},
{0x9a0900, 0x55555555},
{0x9a0968, 0x11},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x12},
{0x9a0900, 0x55555555},
{0x9a0968, 0x13},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x14},
{0x9a0900, 0x55555555},
{0x9a0968, 0x15},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x16},
{0x9a0900, 0x55555555},
{0x9a0968, 0x17},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x18},
{0x9a0900, 0x55555555},
{0x9a0968, 0x19},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x1a},
{0x9a0900, 0x55555555},
{0x9a0968, 0x1b},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x1c},
{0x9a0900, 0x55555555},
{0x9a0968, 0x1d},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x1e},
{0x9a0900, 0x55555555},
{0x9a0968, 0x1f},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x20},
{0x9a0900, 0xffff},
{0x9a0968, 0x21},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x22},
{0x9a0900, 0xffff},
{0x9a0968, 0x23},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x24},
{0x9a0900, 0xffff},
{0x9a0968, 0x25},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x26},
{0x9a0900, 0xffff},
{0x9a0968, 0x27},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x28},
{0x9a0900, 0xffff},
{0x9a0968, 0x29},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x2a},
{0x9a0900, 0xffff},
{0x9a0968, 0x2b},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x2c},
{0x9a0900, 0xffff},
{0x9a0968, 0x2d},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x2e},
{0x9a0900, 0xffff},
{0x9a0968, 0x2f},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x30},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x31},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x32},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x33},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x34},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x35},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x36},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x37},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x38},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x39},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x3a},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x3b},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x3c},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x3d},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x3e},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x3f},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x40},
{0x9a0900, 0x0},
{0x9a0968, 0x41},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x42},
{0x9a0900, 0x0},
{0x9a0968, 0x43},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x44},
{0x9a0900, 0x0},
{0x9a0968, 0x45},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x46},
{0x9a0900, 0x0},
{0x9a0968, 0x47},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x48},
{0x9a0900, 0x0},
{0x9a0968, 0x49},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x4a},
{0x9a0900, 0x0},
{0x9a0968, 0x4b},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x4c},
{0x9a0900, 0x0},
{0x9a0968, 0x4d},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x4e},
{0x9a0900, 0x0},
{0x9a0968, 0x4f},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x50},
{0x9a0900, 0x55555555},
{0x9a0968, 0x51},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x52},
{0x9a0900, 0x55555555},
{0x9a0968, 0x53},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x54},
{0x9a0900, 0x55555555},
{0x9a0968, 0x55},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x56},
{0x9a0900, 0x55555555},
{0x9a0968, 0x57},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x58},
{0x9a0900, 0x55555555},
{0x9a0968, 0x59},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x5a},
{0x9a0900, 0x55555555},
{0x9a0968, 0x5b},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x5c},
{0x9a0900, 0x55555555},
{0x9a0968, 0x5d},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x5e},
{0x9a0900, 0x55555555},
{0x9a0968, 0x5f},
{0x9a0900, 0x0},
{0x9a0968, 0x60},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x61},
{0x9a0900, 0x0},
{0x9a0968, 0x62},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x63},
{0x9a0900, 0x0},
{0x9a0968, 0x64},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x65},
{0x9a0900, 0x0},
{0x9a0968, 0x66},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x67},
{0x9a0900, 0x0},
{0x9a0968, 0x68},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x69},
{0x9a0900, 0x0},
{0x9a0968, 0x6a},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x6b},
{0x9a0900, 0x0},
{0x9a0968, 0x6c},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x6d},
{0x9a0900, 0x0},
{0x9a0968, 0x6e},
{0x9a0900, 0xffffffff},
{0x9a0968, 0x6f},
{0x9a0900, 0x55555555},
{0x9a0968, 0x70},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x71},
{0x9a0900, 0x55555555},
{0x9a0968, 0x72},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x73},
{0x9a0900, 0x55555555},
{0x9a0968, 0x74},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x75},
{0x9a0900, 0x55555555},
{0x9a0968, 0x76},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x77},
{0x9a0900, 0x55555555},
{0x9a0968, 0x78},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x79},
{0x9a0900, 0x55555555},
{0x9a0968, 0x7a},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x7b},
{0x9a0900, 0x55555555},
{0x9a0968, 0x7c},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x7d},
{0x9a0900, 0x55555555},
{0x9a0968, 0x7e},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0x7f},
{0x9a0900, 0xffff},
{0x9a0968, 0x80},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x81},
{0x9a0900, 0xffff},
{0x9a0968, 0x82},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x83},
{0x9a0900, 0xffff},
{0x9a0968, 0x84},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x85},
{0x9a0900, 0xffff},
{0x9a0968, 0x86},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x87},
{0x9a0900, 0xffff},
{0x9a0968, 0x88},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x89},
{0x9a0900, 0xffff},
{0x9a0968, 0x8a},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x8b},
{0x9a0900, 0xffff},
{0x9a0968, 0x8c},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x8d},
{0x9a0900, 0xffff},
{0x9a0968, 0x8e},
{0x9a0900, 0xffff0000},
{0x9a0968, 0x8f},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x90},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x91},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x92},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x93},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x94},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x95},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x96},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x97},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x98},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x99},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x9a},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x9b},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x9c},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x9d},
{0x9a0900, 0xff00ff},
{0x9a0968, 0x9e},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0x9f},
{0x9a0900, 0x0},
{0x9a0968, 0xa0},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xa1},
{0x9a0900, 0x0},
{0x9a0968, 0xa2},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xa3},
{0x9a0900, 0x0},
{0x9a0968, 0xa4},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xa5},
{0x9a0900, 0x0},
{0x9a0968, 0xa6},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xa7},
{0x9a0900, 0x0},
{0x9a0968, 0xa8},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xa9},
{0x9a0900, 0x0},
{0x9a0968, 0xaa},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xab},
{0x9a0900, 0x0},
{0x9a0968, 0xac},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xad},
{0x9a0900, 0x0},
{0x9a0968, 0xae},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xaf},
{0x9a0900, 0x55555555},
{0x9a0968, 0xb0},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xb1},
{0x9a0900, 0x55555555},
{0x9a0968, 0xb2},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xb3},
{0x9a0900, 0x55555555},
{0x9a0968, 0xb4},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xb5},
{0x9a0900, 0x55555555},
{0x9a0968, 0xb6},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xb7},
{0x9a0900, 0x55555555},
{0x9a0968, 0xb8},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xb9},
{0x9a0900, 0x55555555},
{0x9a0968, 0xba},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xbb},
{0x9a0900, 0x55555555},
{0x9a0968, 0xbc},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xbd},
{0x9a0900, 0x55555555},
{0x9a0968, 0xbe},
{0x9a0900, 0x0},
{0x9a0968, 0xbf},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xc0},
{0x9a0900, 0x0},
{0x9a0968, 0xc1},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xc2},
{0x9a0900, 0x0},
{0x9a0968, 0xc3},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xc4},
{0x9a0900, 0x0},
{0x9a0968, 0xc5},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xc6},
{0x9a0900, 0x0},
{0x9a0968, 0xc7},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xc8},
{0x9a0900, 0x0},
{0x9a0968, 0xc9},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xca},
{0x9a0900, 0x0},
{0x9a0968, 0xcb},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xcc},
{0x9a0900, 0x0},
{0x9a0968, 0xcd},
{0x9a0900, 0xffffffff},
{0x9a0968, 0xce},
{0x9a0900, 0x55555555},
{0x9a0968, 0xcf},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xd0},
{0x9a0900, 0x55555555},
{0x9a0968, 0xd1},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xd2},
{0x9a0900, 0x55555555},
{0x9a0968, 0xd3},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xd4},
{0x9a0900, 0x55555555},
{0x9a0968, 0xd5},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xd6},
{0x9a0900, 0x55555555},
{0x9a0968, 0xd7},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xd8},
{0x9a0900, 0x55555555},
{0x9a0968, 0xd9},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xda},
{0x9a0900, 0x55555555},
{0x9a0968, 0xdb},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xdc},
{0x9a0900, 0x55555555},
{0x9a0968, 0xdd},
{0x9a0900, 0xaaaaaaaa},
{0x9a0968, 0xde},
{0x9a0900, 0xffff},
{0x9a0968, 0xdf},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xe0},
{0x9a0900, 0xffff},
{0x9a0968, 0xe1},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xe2},
{0x9a0900, 0xffff},
{0x9a0968, 0xe3},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xe4},
{0x9a0900, 0xffff},
{0x9a0968, 0xe5},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xe6},
{0x9a0900, 0xffff},
{0x9a0968, 0xe7},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xe8},
{0x9a0900, 0xffff},
{0x9a0968, 0xe9},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xea},
{0x9a0900, 0xffff},
{0x9a0968, 0xeb},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xec},
{0x9a0900, 0xffff},
{0x9a0968, 0xed},
{0x9a0900, 0xffff0000},
{0x9a0968, 0xee},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xef},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xf0},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xf1},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xf2},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xf3},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xf4},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xf5},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xf6},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xf7},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xf8},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xf9},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xfa},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xfb},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xfc},
{0x9a0900, 0xff00ff},
{0x9a0968, 0xfd},
{0x9a0900, 0xff00ff00},
{0x9a0968, 0xfe},
{0x9a0900, 0x0},
{0x9a0968, 0xff},
{0x9a0900, 0xffffffff},
{0x9a096c, 0x0},
{0x9a0904, 0x0},
{0x9a096c, 0x1},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x2},
{0x9a0904, 0x0},
{0x9a096c, 0x3},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x4},
{0x9a0904, 0x0},
{0x9a096c, 0x5},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x6},
{0x9a0904, 0x0},
{0x9a096c, 0x7},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x8},
{0x9a0904, 0x0},
{0x9a096c, 0x9},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xa},
{0x9a0904, 0x0},
{0x9a096c, 0xb},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xc},
{0x9a0904, 0x0},
{0x9a096c, 0xd},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xe},
{0x9a0904, 0x0},
{0x9a096c, 0xf},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x10},
{0x9a0904, 0x55555555},
{0x9a096c, 0x11},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x12},
{0x9a0904, 0x55555555},
{0x9a096c, 0x13},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x14},
{0x9a0904, 0x55555555},
{0x9a096c, 0x15},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x16},
{0x9a0904, 0x55555555},
{0x9a096c, 0x17},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x18},
{0x9a0904, 0x55555555},
{0x9a096c, 0x19},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x1a},
{0x9a0904, 0x55555555},
{0x9a096c, 0x1b},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x1c},
{0x9a0904, 0x55555555},
{0x9a096c, 0x1d},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x1e},
{0x9a0904, 0x55555555},
{0x9a096c, 0x1f},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x20},
{0x9a0904, 0xffff},
{0x9a096c, 0x21},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x22},
{0x9a0904, 0xffff},
{0x9a096c, 0x23},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x24},
{0x9a0904, 0xffff},
{0x9a096c, 0x25},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x26},
{0x9a0904, 0xffff},
{0x9a096c, 0x27},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x28},
{0x9a0904, 0xffff},
{0x9a096c, 0x29},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x2a},
{0x9a0904, 0xffff},
{0x9a096c, 0x2b},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x2c},
{0x9a0904, 0xffff},
{0x9a096c, 0x2d},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x2e},
{0x9a0904, 0xffff},
{0x9a096c, 0x2f},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x30},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x31},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x32},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x33},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x34},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x35},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x36},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x37},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x38},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x39},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x3a},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x3b},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x3c},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x3d},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x3e},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x3f},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x40},
{0x9a0904, 0x0},
{0x9a096c, 0x41},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x42},
{0x9a0904, 0x0},
{0x9a096c, 0x43},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x44},
{0x9a0904, 0x0},
{0x9a096c, 0x45},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x46},
{0x9a0904, 0x0},
{0x9a096c, 0x47},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x48},
{0x9a0904, 0x0},
{0x9a096c, 0x49},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x4a},
{0x9a0904, 0x0},
{0x9a096c, 0x4b},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x4c},
{0x9a0904, 0x0},
{0x9a096c, 0x4d},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x4e},
{0x9a0904, 0x0},
{0x9a096c, 0x4f},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x50},
{0x9a0904, 0x55555555},
{0x9a096c, 0x51},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x52},
{0x9a0904, 0x55555555},
{0x9a096c, 0x53},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x54},
{0x9a0904, 0x55555555},
{0x9a096c, 0x55},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x56},
{0x9a0904, 0x55555555},
{0x9a096c, 0x57},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x58},
{0x9a0904, 0x55555555},
{0x9a096c, 0x59},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x5a},
{0x9a0904, 0x55555555},
{0x9a096c, 0x5b},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x5c},
{0x9a0904, 0x55555555},
{0x9a096c, 0x5d},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x5e},
{0x9a0904, 0x55555555},
{0x9a096c, 0x5f},
{0x9a0904, 0x0},
{0x9a096c, 0x60},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x61},
{0x9a0904, 0x0},
{0x9a096c, 0x62},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x63},
{0x9a0904, 0x0},
{0x9a096c, 0x64},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x65},
{0x9a0904, 0x0},
{0x9a096c, 0x66},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x67},
{0x9a0904, 0x0},
{0x9a096c, 0x68},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x69},
{0x9a0904, 0x0},
{0x9a096c, 0x6a},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x6b},
{0x9a0904, 0x0},
{0x9a096c, 0x6c},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x6d},
{0x9a0904, 0x0},
{0x9a096c, 0x6e},
{0x9a0904, 0xffffffff},
{0x9a096c, 0x6f},
{0x9a0904, 0x55555555},
{0x9a096c, 0x70},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x71},
{0x9a0904, 0x55555555},
{0x9a096c, 0x72},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x73},
{0x9a0904, 0x55555555},
{0x9a096c, 0x74},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x75},
{0x9a0904, 0x55555555},
{0x9a096c, 0x76},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x77},
{0x9a0904, 0x55555555},
{0x9a096c, 0x78},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x79},
{0x9a0904, 0x55555555},
{0x9a096c, 0x7a},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x7b},
{0x9a0904, 0x55555555},
{0x9a096c, 0x7c},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x7d},
{0x9a0904, 0x55555555},
{0x9a096c, 0x7e},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0x7f},
{0x9a0904, 0xffff},
{0x9a096c, 0x80},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x81},
{0x9a0904, 0xffff},
{0x9a096c, 0x82},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x83},
{0x9a0904, 0xffff},
{0x9a096c, 0x84},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x85},
{0x9a0904, 0xffff},
{0x9a096c, 0x86},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x87},
{0x9a0904, 0xffff},
{0x9a096c, 0x88},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x89},
{0x9a0904, 0xffff},
{0x9a096c, 0x8a},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x8b},
{0x9a0904, 0xffff},
{0x9a096c, 0x8c},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x8d},
{0x9a0904, 0xffff},
{0x9a096c, 0x8e},
{0x9a0904, 0xffff0000},
{0x9a096c, 0x8f},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x90},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x91},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x92},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x93},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x94},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x95},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x96},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x97},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x98},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x99},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x9a},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x9b},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x9c},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x9d},
{0x9a0904, 0xff00ff},
{0x9a096c, 0x9e},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0x9f},
{0x9a0904, 0x0},
{0x9a096c, 0xa0},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xa1},
{0x9a0904, 0x0},
{0x9a096c, 0xa2},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xa3},
{0x9a0904, 0x0},
{0x9a096c, 0xa4},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xa5},
{0x9a0904, 0x0},
{0x9a096c, 0xa6},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xa7},
{0x9a0904, 0x0},
{0x9a096c, 0xa8},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xa9},
{0x9a0904, 0x0},
{0x9a096c, 0xaa},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xab},
{0x9a0904, 0x0},
{0x9a096c, 0xac},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xad},
{0x9a0904, 0x0},
{0x9a096c, 0xae},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xaf},
{0x9a0904, 0x55555555},
{0x9a096c, 0xb0},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xb1},
{0x9a0904, 0x55555555},
{0x9a096c, 0xb2},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xb3},
{0x9a0904, 0x55555555},
{0x9a096c, 0xb4},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xb5},
{0x9a0904, 0x55555555},
{0x9a096c, 0xb6},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xb7},
{0x9a0904, 0x55555555},
{0x9a096c, 0xb8},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xb9},
{0x9a0904, 0x55555555},
{0x9a096c, 0xba},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xbb},
{0x9a0904, 0x55555555},
{0x9a096c, 0xbc},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xbd},
{0x9a0904, 0x55555555},
{0x9a096c, 0xbe},
{0x9a0904, 0x0},
{0x9a096c, 0xbf},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xc0},
{0x9a0904, 0x0},
{0x9a096c, 0xc1},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xc2},
{0x9a0904, 0x0},
{0x9a096c, 0xc3},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xc4},
{0x9a0904, 0x0},
{0x9a096c, 0xc5},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xc6},
{0x9a0904, 0x0},
{0x9a096c, 0xc7},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xc8},
{0x9a0904, 0x0},
{0x9a096c, 0xc9},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xca},
{0x9a0904, 0x0},
{0x9a096c, 0xcb},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xcc},
{0x9a0904, 0x0},
{0x9a096c, 0xcd},
{0x9a0904, 0xffffffff},
{0x9a096c, 0xce},
{0x9a0904, 0x55555555},
{0x9a096c, 0xcf},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xd0},
{0x9a0904, 0x55555555},
{0x9a096c, 0xd1},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xd2},
{0x9a0904, 0x55555555},
{0x9a096c, 0xd3},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xd4},
{0x9a0904, 0x55555555},
{0x9a096c, 0xd5},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xd6},
{0x9a0904, 0x55555555},
{0x9a096c, 0xd7},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xd8},
{0x9a0904, 0x55555555},
{0x9a096c, 0xd9},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xda},
{0x9a0904, 0x55555555},
{0x9a096c, 0xdb},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xdc},
{0x9a0904, 0x55555555},
{0x9a096c, 0xdd},
{0x9a0904, 0xaaaaaaaa},
{0x9a096c, 0xde},
{0x9a0904, 0xffff},
{0x9a096c, 0xdf},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xe0},
{0x9a0904, 0xffff},
{0x9a096c, 0xe1},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xe2},
{0x9a0904, 0xffff},
{0x9a096c, 0xe3},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xe4},
{0x9a0904, 0xffff},
{0x9a096c, 0xe5},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xe6},
{0x9a0904, 0xffff},
{0x9a096c, 0xe7},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xe8},
{0x9a0904, 0xffff},
{0x9a096c, 0xe9},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xea},
{0x9a0904, 0xffff},
{0x9a096c, 0xeb},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xec},
{0x9a0904, 0xffff},
{0x9a096c, 0xed},
{0x9a0904, 0xffff0000},
{0x9a096c, 0xee},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xef},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xf0},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xf1},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xf2},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xf3},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xf4},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xf5},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xf6},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xf7},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xf8},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xf9},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xfa},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xfb},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xfc},
{0x9a0904, 0xff00ff},
{0x9a096c, 0xfd},
{0x9a0904, 0xff00ff00},
{0x9a096c, 0xfe},
{0x9a0904, 0x0},
{0x9a096c, 0xff},
{0x9a0904, 0xffffffff},
};
/* MID SPEED TO LOW SPEED */
static u8 seq_script_step33_ls_gp106[] = {
0x34, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x00, 0x02,
0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C,
0x00, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x49, 0x90, 0x00,
0x00, 0x00, 0x0C, 0x00, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10,
0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03,
0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x10, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00,
0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00,
0x48, 0x03, 0x9A, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00,
0x90, 0x8F, 0x82, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02,
0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x90, 0x00, 0x9A, 0x00, 0x61, 0x00, 0x00,
0x00, 0x90, 0x00, 0x9A, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0x2E, 0x00, 0x02, 0x00,
0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x27, 0x00, 0x98, 0x06, 0x9A, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9C, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08,
0x9A, 0x00, 0xE7, 0x8F, 0x83, 0x40, 0x38, 0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01,
0x00, 0x34, 0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0x0D, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x8B, 0xC0, 0x24,
0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x83, 0x40, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x00,
0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10, 0x00, 0x01, 0x00, 0xF4, 0x73, 0x13,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x13, 0x00, 0x00, 0x00, 0x01, 0x18,
0x00, 0x20, 0x13, 0x00, 0x02, 0x00, 0x01, 0x18, 0x20, 0x20, 0x13, 0x00, 0x00,
0x00, 0x03, 0x20, 0x20, 0x73, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x20,
0x13, 0x00, 0x01, 0x3B, 0x04, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x01, 0x00,
0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x08, 0x10, 0x20, 0x20, 0x13, 0x00,
0x01, 0x00, 0x03, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
0x00, 0x02, 0x00, 0x90, 0x73, 0x13, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x21, 0x00, 0x1F, 0x00, 0x2C, 0x20, 0x13,
0x00, 0x00, 0x03, 0x00, 0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x04, 0x10,
0xF4, 0x73, 0x13, 0x00, 0x00, 0x01, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10,
0x01, 0x01, 0x00, 0xEC, 0x73, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0xF4, 0x73,
0x13, 0x00, 0x11, 0x01, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x01, 0x00,
0x00, 0x5C, 0x06, 0x9A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x70, 0x06, 0x9A, 0x00,
0x06, 0x13, 0x08, 0xB4, 0x98, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C,
0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x06, 0x9A, 0x00, 0x0E, 0x06,
0x0E, 0x06, 0xD4, 0x0E, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x40, 0xD4, 0x0E, 0x9A,
0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x80, 0x40,
0x13, 0x00, 0x02, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0x10,
0x27, 0x00, 0x00, 0x21, 0x00, 0x1D, 0x00, 0x70, 0x06, 0x9A, 0x00, 0x06, 0x13,
0x08, 0x34, 0x48, 0x02, 0x9A, 0x00, 0xA3, 0x44, 0x14, 0x86, 0x90, 0x02, 0x9A,
0x00, 0x12, 0x2C, 0x18, 0x06, 0x94, 0x02, 0x9A, 0x00, 0x8A, 0x82, 0x41, 0x24,
0x98, 0x02, 0x9A, 0x00, 0x11, 0x05, 0x06, 0x88, 0x9C, 0x02, 0x9A, 0x00, 0x8C,
0x10, 0x00, 0x22, 0xA8, 0x02, 0x9A, 0x00, 0x0B, 0x86, 0x00, 0x01, 0x4C, 0x02,
0x9A, 0x00, 0x85, 0x0C, 0x05, 0x06, 0x30, 0x1F, 0x9A, 0x00, 0x03, 0x16, 0x2C,
0x00, 0xE0, 0x08, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x03, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x94, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0B, 0x9A, 0x00, 0x06, 0x22, 0x22, 0x22, 0x90, 0x00, 0x9A, 0x00, 0x7E, 0x00,
0x00, 0x40, 0x2E, 0x00, 0x02, 0x00, 0xD0, 0x07, 0x00, 0x00, 0x21, 0x00, 0x0D,
0x00, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x9A, 0x00,
0x01, 0x00, 0x00, 0x00, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x80, 0x90,
0x03, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x9A, 0x00, 0x23, 0x01,
0x30, 0x00, 0x00, 0x03, 0x9A, 0x00, 0x2D, 0x02, 0x00, 0x00, 0x2E, 0x00, 0x02,
0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x00, 0x02, 0x9A, 0x00,
0x00, 0x90, 0x8F, 0x82, 0x18, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03,
0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x78, 0x09, 0x9A, 0x00, 0x0B, 0x1E, 0x7A,
0x88, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x00, 0x10, 0x09, 0x90, 0x00,
0x00, 0x00, 0x0A, 0x98, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x10,
0x49, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00,
0x0A, 0x98, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,
0x00, 0x74, 0x09, 0x90, 0x00, 0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x20, 0xA1, 0x07, 0x00, 0x01, 0x00, 0x02, 0x00, 0x74, 0x49, 0x90, 0x00, 0x15,
0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x20, 0xA1, 0x07, 0x00, 0x21, 0x00,
0x0D, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x01, 0x30, 0x08, 0x9A,
0x00, 0x91, 0x10, 0x27, 0x00, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19,
0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19, 0x10, 0x49, 0x90, 0x00, 0x00,
0x00, 0x08, 0x19, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19, 0x20, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x02,
0x00, 0x0B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x00, 0x02, 0x9A, 0x00,
0x00, 0x98, 0x8F, 0x02, 0x16, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* LOW SPEED TO MID SPEED */
static u8 seq_script_step33_gp106[] = {
0x34, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x00, 0x02,
0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C,
0x00, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x49, 0x90, 0x00,
0x00, 0x00, 0x0C, 0x00, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10,
0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03,
0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x10, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00,
0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00,
0x48, 0x03, 0x9A, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00,
0x90, 0x8F, 0x82, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02,
0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x90, 0x00, 0x9A, 0x00, 0x61, 0x00, 0x00,
0x00, 0x90, 0x00, 0x9A, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0x2E, 0x00, 0x02, 0x00,
0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x27, 0x00, 0x98, 0x06, 0x9A, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9C, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08,
0x9A, 0x00, 0xE7, 0x8F, 0x83, 0x40, 0x38, 0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01,
0x00, 0x34, 0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0x0D, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x8B, 0xC0, 0x24,
0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x83, 0x40, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x00,
0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10, 0x00, 0x01, 0x00, 0xF4, 0x73, 0x13,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x13, 0x00, 0x00, 0x00, 0x01, 0x18,
0x00, 0x20, 0x13, 0x00, 0x02, 0x00, 0x01, 0x18, 0x20, 0x20, 0x13, 0x00, 0x00,
0x00, 0x03, 0x20, 0x20, 0x73, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x20,
0x13, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x01, 0x00,
0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x08, 0x10, 0x20, 0x20, 0x13, 0x00,
0x01, 0x00, 0x03, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
0x00, 0x02, 0x00, 0x90, 0x73, 0x13, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x21, 0x00, 0x1F, 0x00, 0x2C, 0x20, 0x13,
0x00, 0x00, 0x03, 0x00, 0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x04, 0x10,
0xF4, 0x73, 0x13, 0x00, 0x00, 0x01, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10,
0x01, 0x01, 0x00, 0xEC, 0x73, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0xF4, 0x73,
0x13, 0x00, 0x11, 0x01, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x01, 0x00,
0x00, 0x5C, 0x06, 0x9A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x70, 0x06, 0x9A, 0x00,
0x06, 0x13, 0x08, 0xB4, 0x98, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C,
0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x06, 0x9A, 0x00, 0x0E, 0x06,
0x0E, 0x06, 0xD4, 0x0E, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x40, 0xD4, 0x0E, 0x9A,
0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x80, 0x40,
0x13, 0x00, 0x02, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0x10,
0x27, 0x00, 0x00, 0x21, 0x00, 0x1D, 0x00, 0x70, 0x06, 0x9A, 0x00, 0x06, 0x13,
0x08, 0x34, 0x48, 0x02, 0x9A, 0x00, 0xA3, 0x44, 0x14, 0x86, 0x90, 0x02, 0x9A,
0x00, 0x12, 0x2C, 0x18, 0x06, 0x94, 0x02, 0x9A, 0x00, 0x8A, 0x82, 0x41, 0x24,
0x98, 0x02, 0x9A, 0x00, 0x11, 0x05, 0x06, 0x88, 0x9C, 0x02, 0x9A, 0x00, 0x8C,
0x10, 0x00, 0x22, 0xA8, 0x02, 0x9A, 0x00, 0x0B, 0x86, 0x00, 0x01, 0x4C, 0x02,
0x9A, 0x00, 0x85, 0x0C, 0x05, 0x06, 0x30, 0x1F, 0x9A, 0x00, 0x03, 0x16, 0x2C,
0x00, 0xE0, 0x08, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x03, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x94, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0B, 0x9A, 0x00, 0x06, 0x22, 0x22, 0x22, 0x90, 0x00, 0x9A, 0x00, 0x7E, 0x00,
0x00, 0x40, 0x2E, 0x00, 0x02, 0x00, 0xD0, 0x07, 0x00, 0x00, 0x21, 0x00, 0x0D,
0x00, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x9A, 0x00,
0x01, 0x00, 0x00, 0x00, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x80, 0x90,
0x03, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x9A, 0x00, 0x23, 0x01,
0x30, 0x00, 0x00, 0x03, 0x9A, 0x00, 0x2D, 0x02, 0x00, 0x00, 0x2E, 0x00, 0x02,
0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x00, 0x02, 0x9A, 0x00,
0x00, 0x90, 0x8F, 0x82, 0x18, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03,
0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x78, 0x09, 0x9A, 0x00, 0x0B, 0x1E, 0x7A,
0x88, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x00, 0x10, 0x09, 0x90, 0x00,
0x00, 0x00, 0x0A, 0x98, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x10,
0x49, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00,
0x0A, 0x98, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,
0x00, 0x74, 0x09, 0x90, 0x00, 0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x20, 0xA1, 0x07, 0x00, 0x01, 0x00, 0x02, 0x00, 0x74, 0x49, 0x90, 0x00, 0x15,
0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x20, 0xA1, 0x07, 0x00, 0x21, 0x00,
0x0D, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x01, 0x30, 0x08, 0x9A,
0x00, 0x91, 0x10, 0x27, 0x00, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19,
0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19, 0x10, 0x49, 0x90, 0x00, 0x00,
0x00, 0x08, 0x19, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19, 0x20, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x02,
0x00, 0x0B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x00, 0x02, 0x9A, 0x00,
0x00, 0x98, 0x8F, 0x02, 0x16, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* LOW/MID SPEED TO HIGH SPEED */
static u8 seq_script_step28_gp106[] = {
0x34, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x30, 0x03,
0x9A, 0x00, 0x14, 0x00, 0x10, 0x00, 0x38, 0xD6, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x04, 0xD6, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00,
0x20, 0x4E, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00,
0x90, 0x8F, 0x02, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x14, 0x09,
0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C,
0x00, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x02, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21,
0x00, 0x03, 0x00, 0x10, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00,
0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x48, 0x03, 0x9A,
0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x82,
0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00,
0x90, 0x8F, 0x02, 0x90, 0x00, 0x9A, 0x00, 0x61, 0x00, 0x00, 0x00, 0x90, 0x00,
0x9A, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00,
0x00, 0x21, 0x00, 0x27, 0x00, 0x98, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x9C, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0xE7,
0x8F, 0x88, 0xF7, 0x40, 0x0D, 0x9A, 0x00, 0x20, 0xE0, 0x01, 0x00, 0x00, 0x02,
0x9A, 0x00, 0x00, 0x90, 0x8F, 0x1A, 0x00, 0x08, 0x9A, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF0, 0x73, 0x13, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x08, 0x9A, 0x00,
0x90, 0x90, 0x67, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x00, 0x01, 0x00, 0xF4,
0x73, 0x13, 0x00, 0x10, 0x00, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x00, 0x00,
0x01, 0x00, 0x20, 0x20, 0x13, 0x00, 0x00, 0x00, 0x03, 0x20, 0x20, 0x73, 0x13,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x13, 0x00, 0x04, 0x00, 0x00, 0x00,
0x34, 0x20, 0x13, 0x00, 0x00, 0x00, 0x8A, 0xF9, 0x24, 0x20, 0x13, 0x00, 0x01,
0x32, 0x05, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x28, 0x20,
0x13, 0x00, 0x10, 0x00, 0x08, 0x10, 0x20, 0x20, 0x13, 0x00, 0x01, 0x00, 0x03,
0x20, 0x34, 0x00, 0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x90, 0x73, 0x13, 0x00, 0x15,
0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x34, 0x00,
0x02, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x2C, 0x20, 0x13,
0x00, 0x00, 0x03, 0x00, 0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x04, 0x10,
0xF4, 0x73, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x13, 0x00, 0x00,
0x00, 0x01, 0x98, 0x04, 0x20, 0x13, 0x00, 0x01, 0x0B, 0x01, 0x00, 0x00, 0x20,
0x13, 0x00, 0x01, 0x00, 0x01, 0x98, 0x34, 0x00, 0x02, 0x00, 0x0D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
0x90, 0x73, 0x13, 0x00, 0x15, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
0xFA, 0x00, 0x00, 0x34, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x21, 0x00,
0x1D, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0xF4, 0x73, 0x13,
0x00, 0x10, 0x11, 0x00, 0x00, 0xEC, 0x73, 0x13, 0x00, 0x00, 0x00, 0x03, 0x00,
0xF0, 0x73, 0x13, 0x00, 0x02, 0x00, 0x00, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x12,
0x11, 0x00, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x12, 0x00, 0x00, 0x00, 0x08, 0x08,
0x9A, 0x00, 0x70, 0x00, 0x08, 0x48, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F,
0x1A, 0x24, 0x08, 0x9A, 0x00, 0xE5, 0x8F, 0x88, 0xF7, 0x08, 0x08, 0x9A, 0x00,
0x70, 0x00, 0xA8, 0x4A, 0x24, 0x08, 0x9A, 0x00, 0x85, 0x8F, 0x88, 0xF7, 0x38,
0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0x1F, 0x9A, 0x00, 0x00, 0x00,
0x01, 0x00, 0x34, 0x0D, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02,
0x00, 0x2C, 0x01, 0x00, 0x00, 0x21, 0x00, 0x09, 0x00, 0x5C, 0x06, 0x9A, 0x00,
0x22, 0x00, 0x00, 0x00, 0x0C, 0x06, 0x9A, 0x00, 0xD0, 0x20, 0x00, 0xFD, 0xD4,
0x0E, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x40, 0xD4, 0x0E, 0x9A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x21, 0x00, 0x25,
0x00, 0x2C, 0x08, 0x9A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x30, 0x08, 0x9A, 0x00,
0x90, 0xA0, 0x67, 0x00, 0x48, 0x02, 0x9A, 0x00, 0xA3, 0x44, 0x20, 0x95, 0x90,
0x02, 0x9A, 0x00, 0x46, 0xAE, 0x60, 0x16, 0x94, 0x02, 0x9A, 0x00, 0x96, 0x02,
0xF6, 0x28, 0x98, 0x02, 0x9A, 0x00, 0x00, 0x09, 0x16, 0x88, 0x9C, 0x02, 0x9A,
0x00, 0x4C, 0x39, 0x00, 0x24, 0xA0, 0x02, 0x9A, 0x00, 0x32, 0x80, 0x83, 0xD5,
0xA8, 0x02, 0x9A, 0x00, 0x0F, 0x86, 0x00, 0x02, 0x14, 0x06, 0x9A, 0x00, 0x77,
0x4E, 0x04, 0x40, 0x10, 0x06, 0x9A, 0x00, 0x77, 0x4E, 0x04, 0x40, 0x78, 0x07,
0x10, 0x00, 0x44, 0x04, 0x00, 0x82, 0x4C, 0x02, 0x9A, 0x00, 0x85, 0x0C, 0x05,
0x15, 0xE0, 0x08, 0x9A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x90, 0x03, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x94, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0B, 0x9A, 0x00, 0x06, 0x22, 0x22, 0x22, 0x90, 0x00, 0x9A, 0x00, 0x7E, 0x00,
0x00, 0x40, 0x2E, 0x00, 0x02, 0x00, 0xD0, 0x07, 0x00, 0x00, 0x21, 0x00, 0x13,
0x00, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x9A, 0x00,
0x01, 0x00, 0x00, 0x00, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x80, 0x90,
0x03, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x02, 0x9A, 0x00, 0x96, 0x02,
0xF6, 0x24, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x01, 0xA4, 0x14, 0x09, 0x90,
0x00, 0x00, 0x00, 0x01, 0xA4, 0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x01, 0xA4,
0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x01, 0xA4, 0x34, 0x00, 0x02, 0x00, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x02, 0x00, 0x74, 0x09, 0x90, 0x00, 0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00,
0x00, 0x20, 0xA1, 0x07, 0x00, 0x01, 0x00, 0x02, 0x00, 0x74, 0x49, 0x90, 0x00,
0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x20, 0xA1, 0x07, 0x00, 0x34,
0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03,
0x00, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x94, 0x02, 0x9A, 0x00, 0x96, 0x02, 0xF6,
0x28, 0x38, 0x03, 0x9A, 0x00, 0x03, 0x01, 0x30, 0x00, 0x3C, 0x03, 0x9A, 0x00,
0xFF, 0x01, 0x40, 0x00, 0x00, 0x03, 0x9A, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x54,
0x03, 0x9A, 0x00, 0x03, 0x00, 0x80, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03,
0x00, 0x00, 0x21, 0x00, 0x09, 0x00, 0x48, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x70,
0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F, 0x9A, 0x18, 0x03, 0x9A, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F, 0x1A, 0x2E,
0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x78, 0x09,
0x9A, 0x00, 0x0F, 0x1E, 0x7E, 0x88, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0E,
0xA4, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0E, 0xA4, 0x10, 0x49, 0x90, 0x00,
0x00, 0x00, 0x0E, 0xA4, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0E, 0xA4, 0x34,
0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x74, 0x09, 0x90, 0x00, 0x15, 0x00, 0x03,
0x00, 0x0F, 0x00, 0x00, 0x00, 0x20, 0xA1, 0x07, 0x00, 0x01, 0x00, 0x02, 0x00,
0x74, 0x49, 0x90, 0x00, 0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x20,
0xA1, 0x07, 0x00, 0x34, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2E, 0x00,
0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x00, 0x02, 0x9A,
0x00, 0x00, 0x10, 0x8F, 0x3A, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x25,
0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x25, 0x10, 0x49, 0x90, 0x00, 0x00,
0x00, 0x0C, 0x25, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x25, 0x20, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x02,
0x00, 0x13, 0x00, 0x00, 0x00, 0x16, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
};
/* HIGH SPEED TO LOW SPEED */
static u8 seq_script_step32_ls_gp106[] = {
0x34, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x10, 0x09,
0x90, 0x00, 0x00, 0x00, 0x0C, 0x24, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C,
0x24, 0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x24, 0x14, 0x49, 0x90, 0x00,
0x00, 0x00, 0x0C, 0x24, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E,
0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x10, 0x03,
0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00,
0x00, 0x21, 0x00, 0x0D, 0x00, 0x48, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x70, 0x00,
0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F, 0x82, 0x14, 0x03, 0x9A, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F, 0x02, 0x90, 0x00,
0x9A, 0x00, 0x61, 0x00, 0x00, 0x00, 0x90, 0x00, 0x9A, 0x00, 0x7F, 0x00, 0x00,
0xC0, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x35, 0x00,
0x98, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x06, 0x9A, 0x00, 0x00,
0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0x85, 0x8F, 0x8B, 0xF7, 0x38, 0x1F,
0x9A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01,
0x00, 0x34, 0x0D, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00,
0xE7, 0x8F, 0x8B, 0xF7, 0x40, 0x0D, 0x9A, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x24,
0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x83, 0x40, 0x08, 0x08, 0x9A, 0x00, 0x70, 0x00,
0xA0, 0x4A, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x30, 0x08, 0x9A,
0x00, 0x90, 0x20, 0x67, 0x01, 0x30, 0x08, 0x9A, 0x00, 0x90, 0x20, 0x67, 0x00,
0xF4, 0x73, 0x13, 0x00, 0x12, 0x11, 0x00, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10,
0x11, 0x00, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x20,
0x13, 0x00, 0x00, 0x00, 0x03, 0x98, 0x00, 0x20, 0x13, 0x00, 0x02, 0x00, 0x03,
0x98, 0x20, 0x20, 0x13, 0x00, 0x00, 0x00, 0x03, 0x20, 0x20, 0x73, 0x13, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x13, 0x00, 0x06, 0x00, 0x00, 0x10, 0x34,
0x20, 0x13, 0x00, 0x00, 0x10, 0x67, 0x06, 0x24, 0x20, 0x13, 0x00, 0x01, 0x3B,
0x04, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x28, 0x20, 0x13,
0x00, 0x10, 0x00, 0x08, 0x10, 0x20, 0x20, 0x13, 0x00, 0x01, 0x00, 0x03, 0x20,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x90,
0x73, 0x13, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xFA,
0x00, 0x00, 0x21, 0x00, 0x23, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x03, 0x00,
0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x04, 0x10, 0xF4, 0x73, 0x13, 0x00,
0x00, 0x11, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10, 0x11, 0x01, 0x00, 0xF0,
0x73, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0xEC, 0x73, 0x13, 0x00, 0x00, 0x00,
0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x11, 0x01, 0x00, 0xF4, 0x73, 0x13,
0x00, 0x11, 0x11, 0x00, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x20, 0x27, 0x00,
0x5C, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x06, 0x9A, 0x00, 0x06,
0x06, 0x06, 0x06, 0x9C, 0x06, 0x9A, 0x00, 0x06, 0x06, 0x06, 0x06, 0x94, 0x06,
0x9A, 0x00, 0x0E, 0x06, 0x0E, 0x06, 0x0C, 0x06, 0x9A, 0x00, 0x50, 0x20, 0x00,
0xFD, 0xD4, 0x0E, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x40, 0xD4, 0x0E, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x80, 0x40, 0x13,
0x00, 0x02, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x21, 0x00, 0x23, 0x00, 0x2C, 0x08,
0x9A, 0x00, 0x00, 0x00, 0x15, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27,
0x00, 0x48, 0x02, 0x9A, 0x00, 0xA3, 0x44, 0x14, 0x84, 0x90, 0x02, 0x9A, 0x00,
0x0A, 0x17, 0x0E, 0x03, 0x94, 0x02, 0x9A, 0x00, 0x89, 0x02, 0x21, 0x24, 0x98,
0x02, 0x9A, 0x00, 0x11, 0x04, 0x05, 0x88, 0x9C, 0x02, 0x9A, 0x00, 0x6C, 0x10,
0x00, 0x22, 0xA0, 0x02, 0x9A, 0x00, 0x32, 0x00, 0x61, 0xD3, 0xA8, 0x02, 0x9A,
0x00, 0x0B, 0x86, 0x00, 0x02, 0x14, 0x06, 0x9A, 0x00, 0x77, 0x3E, 0x03, 0x30,
0x10, 0x06, 0x9A, 0x00, 0x77, 0x3E, 0x03, 0x30, 0x08, 0x08, 0x9A, 0x00, 0x70,
0x00, 0x00, 0x48, 0x78, 0x07, 0x10, 0x00, 0x33, 0x03, 0x00, 0x82, 0x4C, 0x02,
0x9A, 0x00, 0x85, 0x0C, 0x05, 0x04, 0x30, 0x1F, 0x9A, 0x00, 0x03, 0x16, 0x2C,
0x00, 0xE0, 0x08, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x9A, 0x00,
0x7E, 0x00, 0x00, 0x40, 0x2E, 0x00, 0x02, 0x00, 0xD0, 0x07, 0x00, 0x00, 0x21,
0x00, 0x0D, 0x00, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x03,
0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00,
0x80, 0x38, 0x03, 0x9A, 0x00, 0x23, 0x00, 0x30, 0x00, 0x00, 0x03, 0x9A, 0x00,
0x25, 0x01, 0x00, 0x00, 0x54, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x80, 0x00, 0x2E,
0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x09, 0x00, 0x30, 0x03,
0x9A, 0x00, 0x30, 0x00, 0x10, 0x00, 0x48, 0x03, 0x9A, 0x00, 0x88, 0x00, 0x70,
0x00, 0x38, 0xD6, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x04, 0xD6, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0x20, 0x4E, 0x00, 0x00, 0x21,
0x00, 0x07, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x82, 0x18, 0x03,
0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F,
0x02, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00,
0x78, 0x09, 0x9A, 0x00, 0x0F, 0x3E, 0x7A, 0x88, 0x30, 0x08, 0x9A, 0x00, 0x91,
0x10, 0x27, 0x00, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x88, 0x14, 0x09,
0x90, 0x00, 0x00, 0x00, 0x0A, 0x88, 0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0A,
0x88, 0x14, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x88, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x74, 0x09, 0x90, 0x00, 0x15,
0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x20, 0xA1, 0x07, 0x00, 0x01, 0x00,
0x02, 0x00, 0x74, 0x49, 0x90, 0x00, 0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00,
0x00, 0x20, 0xA1, 0x07, 0x00, 0x21, 0x00, 0x05, 0x00, 0x30, 0x08, 0x9A, 0x00,
0x91, 0x10, 0x27, 0x01, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x00, 0x20,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x00, 0x02, 0x9A,
0x00, 0x00, 0x98, 0x8F, 0x02, 0x16, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* HIGH SPEED TO LOW/MID SPEED */
static u8 seq_script_step32_gp106[] = {
0x34, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x10, 0x09,
0x90, 0x00, 0x00, 0x00, 0x0C, 0x24, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0C,
0x24, 0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0C, 0x24, 0x14, 0x49, 0x90, 0x00,
0x00, 0x00, 0x0C, 0x24, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E,
0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x10, 0x03,
0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00,
0x00, 0x21, 0x00, 0x0D, 0x00, 0x48, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x70, 0x00,
0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F, 0x82, 0x14, 0x03, 0x9A, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x10, 0x8F, 0x02, 0x90, 0x00,
0x9A, 0x00, 0x61, 0x00, 0x00, 0x00, 0x90, 0x00, 0x9A, 0x00, 0x7F, 0x00, 0x00,
0xC0, 0x2E, 0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x35, 0x00,
0x98, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x06, 0x9A, 0x00, 0x00,
0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00, 0x85, 0x8F, 0x8B, 0xF7, 0x38, 0x1F,
0x9A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0x1F, 0x9A, 0x00, 0x00, 0x00, 0x01,
0x00, 0x34, 0x0D, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x9A, 0x00,
0xE7, 0x8F, 0x8B, 0xF7, 0x40, 0x0D, 0x9A, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x24,
0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x83, 0x40, 0x08, 0x08, 0x9A, 0x00, 0x70, 0x00,
0xA0, 0x4A, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x30, 0x08, 0x9A,
0x00, 0x90, 0x20, 0x67, 0x01, 0x30, 0x08, 0x9A, 0x00, 0x90, 0x20, 0x67, 0x00,
0xF4, 0x73, 0x13, 0x00, 0x12, 0x11, 0x00, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10,
0x11, 0x00, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x20,
0x13, 0x00, 0x00, 0x00, 0x03, 0x98, 0x00, 0x20, 0x13, 0x00, 0x02, 0x00, 0x03,
0x98, 0x20, 0x20, 0x13, 0x00, 0x00, 0x00, 0x03, 0x20, 0x20, 0x73, 0x13, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x13, 0x00, 0x06, 0x00, 0x00, 0x10, 0x34,
0x20, 0x13, 0x00, 0x00, 0x10, 0x67, 0x06, 0x24, 0x20, 0x13, 0x00, 0x01, 0x3B,
0x02, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x28, 0x20, 0x13,
0x00, 0x10, 0x00, 0x08, 0x10, 0x20, 0x20, 0x13, 0x00, 0x01, 0x00, 0x03, 0x20,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x90,
0x73, 0x13, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xFA,
0x00, 0x00, 0x21, 0x00, 0x25, 0x00, 0x2C, 0x20, 0x13, 0x00, 0x00, 0x03, 0x00,
0x00, 0x28, 0x20, 0x13, 0x00, 0x10, 0x00, 0x04, 0x10, 0xF4, 0x73, 0x13, 0x00,
0x00, 0x11, 0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x10, 0x11, 0x01, 0x00, 0xF0,
0x73, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0xEC, 0x73, 0x13, 0x00, 0x00, 0x00,
0x01, 0x00, 0xF4, 0x73, 0x13, 0x00, 0x11, 0x11, 0x01, 0x00, 0xF4, 0x73, 0x13,
0x00, 0x11, 0x11, 0x00, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x20, 0x27, 0x00,
0x5C, 0x06, 0x9A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x70, 0x06, 0x9A, 0x00, 0x06,
0x13, 0x08, 0xB4, 0x98, 0x06, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x06,
0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x06, 0x9A, 0x00, 0x0E, 0x06, 0x0E,
0x06, 0x0C, 0x06, 0x9A, 0x00, 0x50, 0x20, 0x00, 0xFD, 0xD4, 0x0E, 0x9A, 0x00,
0x00, 0x00, 0x00, 0x40, 0xD4, 0x0E, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24,
0x08, 0x9A, 0x00, 0xE7, 0x8F, 0x80, 0x40, 0x13, 0x00, 0x02, 0x00, 0x2C, 0x01,
0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0x10, 0x27, 0x00, 0x00, 0x21, 0x00, 0x25,
0x00, 0x70, 0x06, 0x9A, 0x00, 0x06, 0x13, 0x08, 0x34, 0x2C, 0x08, 0x9A, 0x00,
0x00, 0x00, 0x15, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x00, 0x48,
0x02, 0x9A, 0x00, 0xA3, 0x44, 0x14, 0x86, 0x90, 0x02, 0x9A, 0x00, 0x12, 0x2C,
0x18, 0x06, 0x94, 0x02, 0x9A, 0x00, 0x8A, 0x82, 0x41, 0x24, 0x98, 0x02, 0x9A,
0x00, 0x11, 0x05, 0x06, 0x88, 0x9C, 0x02, 0x9A, 0x00, 0x8C, 0x10, 0x00, 0x22,
0xA0, 0x02, 0x9A, 0x00, 0x32, 0x00, 0x61, 0xD3, 0xA8, 0x02, 0x9A, 0x00, 0x0B,
0x86, 0x00, 0x01, 0x14, 0x06, 0x9A, 0x00, 0x77, 0x3E, 0x03, 0x30, 0x10, 0x06,
0x9A, 0x00, 0x77, 0x3E, 0x03, 0x30, 0x08, 0x08, 0x9A, 0x00, 0x70, 0x00, 0x00,
0x48, 0x78, 0x07, 0x10, 0x00, 0x33, 0x03, 0x00, 0x82, 0x4C, 0x02, 0x9A, 0x00,
0x85, 0x0C, 0x05, 0x06, 0x30, 0x1F, 0x9A, 0x00, 0x03, 0x16, 0x2C, 0x00, 0xE0,
0x08, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x9A, 0x00, 0x7E, 0x00,
0x00, 0x40, 0x2E, 0x00, 0x02, 0x00, 0xD0, 0x07, 0x00, 0x00, 0x21, 0x00, 0x0D,
0x00, 0x14, 0x03, 0x9A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x9A, 0x00,
0x01, 0x00, 0x00, 0x00, 0x10, 0x02, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x80, 0x38,
0x03, 0x9A, 0x00, 0x23, 0x01, 0x30, 0x00, 0x00, 0x03, 0x9A, 0x00, 0x2D, 0x02,
0x00, 0x00, 0x54, 0x03, 0x9A, 0x00, 0x00, 0x00, 0x80, 0x00, 0x2E, 0x00, 0x02,
0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x09, 0x00, 0x30, 0x03, 0x9A, 0x00,
0x30, 0x00, 0x10, 0x00, 0x48, 0x03, 0x9A, 0x00, 0x88, 0x00, 0x70, 0x00, 0x38,
0xD6, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x04, 0xD6, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x2E, 0x00, 0x02, 0x00, 0x20, 0x4E, 0x00, 0x00, 0x21, 0x00, 0x07,
0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x82, 0x18, 0x03, 0x9A, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x90, 0x8F, 0x02, 0x2E,
0x00, 0x02, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x78, 0x09,
0x9A, 0x00, 0x0B, 0x1E, 0x7A, 0x88, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27,
0x00, 0x10, 0x09, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x14, 0x09, 0x90, 0x00,
0x00, 0x00, 0x0A, 0x98, 0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x14,
0x49, 0x90, 0x00, 0x00, 0x00, 0x0A, 0x98, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x74, 0x09, 0x90, 0x00, 0x15, 0x00, 0x03,
0x00, 0x0F, 0x00, 0x00, 0x00, 0x20, 0xA1, 0x07, 0x00, 0x01, 0x00, 0x02, 0x00,
0x74, 0x49, 0x90, 0x00, 0x15, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x20,
0xA1, 0x07, 0x00, 0x21, 0x00, 0x0D, 0x00, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10,
0x27, 0x01, 0x30, 0x08, 0x9A, 0x00, 0x91, 0x10, 0x27, 0x00, 0x10, 0x09, 0x90,
0x00, 0x00, 0x00, 0x08, 0x19, 0x14, 0x09, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19,
0x10, 0x49, 0x90, 0x00, 0x00, 0x00, 0x08, 0x19, 0x14, 0x49, 0x90, 0x00, 0x00,
0x00, 0x08, 0x19, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x34, 0x00, 0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03,
0x00, 0x00, 0x02, 0x9A, 0x00, 0x00, 0x98, 0x8F, 0x02, 0x16, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00,
};
#ifdef CONFIG_DEBUG_FS
static int mclk_debugfs_init(struct gk20a *g);
#endif
static void mclk_memory_load_training_pattern(struct gk20a *g)
{
u32 reg_writes;
u32 index;
gk20a_dbg_info("");
reg_writes = ((sizeof(memory_pattern_reglist) /
sizeof((memory_pattern_reglist)[0])));
for (index = 0; index < reg_writes; index++) {
gk20a_writel(g, memory_pattern_reglist[index].regaddr,
memory_pattern_reglist[index].writeval);
}
gk20a_dbg_fn("done");
}
static void mclk_seq_pmucmdhandler(struct gk20a *g, struct pmu_msg *_msg,
void *param, u32 handle, u32 status)
{
struct nv_pmu_seq_msg *msg = (struct nv_pmu_seq_msg *)_msg;
struct nv_pmu_seq_msg_run_script *seq_msg;
u32 msg_status = 0;
gk20a_dbg_info("");
if (status != 0) {
nvgpu_err(g, "mclk seq_script cmd aborted");
msg_status = -ENOENT;
goto status_update;
}
seq_msg = &msg->run_script;
if (seq_msg->msg_type != NV_PMU_SEQ_MSG_ID_RUN_SCRIPT) {
msg_status = -ENOENT;
goto status_update;
}
if (seq_msg->error_code) {
msg_status = -ENOENT;
goto status_update;
}
status_update:
*((u32 *)param) = msg_status;
}
static int mclk_get_memclk_table(struct gk20a *g)
{
int status = 0;
u8 *mem_table_ptr = NULL;
u32 idx_to_ptr_tbl[8];
u32 idx_to_cmd_ptr_tbl[8];
u32 old_fbio_delay;
u32 old_fbio_cmd_delay;
u32 cmd_idx;
u32 shadow_idx;
struct vbios_memory_clock_header_1x memclock_table_header = { 0 };
struct vbios_memory_clock_base_entry_11 memclock_base_entry = { 0 };
u8 *mem_entry_ptr = NULL;
int index;
gk20a_dbg_info("");
mem_table_ptr = (u8 *)nvgpu_bios_get_perf_table_ptrs(g,
g->bios.perf_token,
MEMORY_CLOCK_TABLE);
if (mem_table_ptr == NULL) {
status = -EPERM;
goto done;
}
memcpy(&memclock_table_header, mem_table_ptr,
sizeof(memclock_table_header));
if ((memclock_table_header.version <
VBIOS_MEMORY_CLOCK_HEADER_11_VERSION) ||
(memclock_table_header.base_entry_size <
VBIOS_MEMORY_CLOCK_BASE_ENTRY_11_2_SIZE)) {
status = -EINVAL;
goto done;
}
/* reset and save shadow table map and registers */
old_fbio_delay = gk20a_readl(g, fb_fbpa_fbio_delay_r());
old_fbio_cmd_delay = gk20a_readl(g, fb_fbpa_fbio_cmd_delay_r());
memset(idx_to_ptr_tbl, 0, sizeof(idx_to_ptr_tbl));
memset(idx_to_cmd_ptr_tbl, 0, sizeof(idx_to_cmd_ptr_tbl));
/* Read table entries */
mem_entry_ptr = mem_table_ptr + memclock_table_header.header_size;
for (index = 0; index < memclock_table_header.entry_count; index++) {
u8 script_index, cmd_script_index;
u32 script_ptr = 0, cmd_script_ptr = 0;
memcpy(&memclock_base_entry, mem_entry_ptr,
memclock_table_header.base_entry_size);
if (memclock_base_entry.maximum == 0)
continue;
script_index = BIOS_GET_FIELD(memclock_base_entry.flags1,
VBIOS_MEMORY_CLOCK_BASE_ENTRY_11_FLAGS1_SCRIPT_INDEX);
script_ptr = nvgpu_bios_read_u32(g,
memclock_table_header.script_list_ptr +
script_index * sizeof(u32));
if (!script_ptr)
continue;
/* Link and execute shadow scripts */
for (shadow_idx = 0; shadow_idx <= fb_fbpa_fbio_delay_priv_max_v();
++shadow_idx) {
if (script_ptr == idx_to_ptr_tbl[shadow_idx]) {
break;
}
}
/* script has not been executed before */
if (shadow_idx > fb_fbpa_fbio_delay_priv_max_v()) {
/* find unused index */
for (shadow_idx = 0; shadow_idx <
fb_fbpa_fbio_delay_priv_max_v();
++shadow_idx) {
if (idx_to_ptr_tbl[shadow_idx] == 0)
break;
}
if (shadow_idx > fb_fbpa_fbio_delay_priv_max_v()) {
nvgpu_err(g, "invalid shadow reg script index");
status = -EINVAL;
goto done;
}
idx_to_ptr_tbl[shadow_idx] = script_ptr;
gk20a_writel(g, fb_fbpa_fbio_delay_r(),
set_field(old_fbio_delay,
fb_fbpa_fbio_delay_priv_m(),
fb_fbpa_fbio_delay_priv_f(shadow_idx)));
status = nvgpu_bios_execute_script(g, script_ptr);
if (status < 0) {
gk20a_writel(g, fb_fbpa_fbio_delay_r(),
old_fbio_delay);
goto done;
}
gk20a_writel(g, fb_fbpa_fbio_delay_r(), old_fbio_delay);
}
cmd_script_index = BIOS_GET_FIELD(memclock_base_entry.flags2,
VBIOS_MEMORY_CLOCK_BASE_ENTRY_12_FLAGS2_CMD_SCRIPT_INDEX);
cmd_script_ptr = nvgpu_bios_read_u32(g,
memclock_table_header.cmd_script_list_ptr +
cmd_script_index * sizeof(u32));
if (!cmd_script_ptr)
continue;
/* Link and execute cmd shadow scripts */
for (cmd_idx = 0; cmd_idx <= fb_fbpa_fbio_cmd_delay_cmd_priv_max_v();
++cmd_idx) {
if (cmd_script_ptr == idx_to_cmd_ptr_tbl[cmd_idx])
break;
}
/* script has not been executed before */
if (cmd_idx > fb_fbpa_fbio_cmd_delay_cmd_priv_max_v()) {
/* find unused index */
for (cmd_idx = 0; cmd_idx <
fb_fbpa_fbio_cmd_delay_cmd_priv_max_v();
++cmd_idx) {
if (idx_to_cmd_ptr_tbl[cmd_idx] == 0)
break;
}
if (cmd_idx > fb_fbpa_fbio_cmd_delay_cmd_priv_max_v()) {
nvgpu_err(g,
"invalid shadow reg cmd script index");
status = -EINVAL;
goto done;
}
idx_to_cmd_ptr_tbl[cmd_idx] = cmd_script_ptr;
gk20a_writel(g, fb_fbpa_fbio_cmd_delay_r(),
set_field(old_fbio_cmd_delay,
fb_fbpa_fbio_cmd_delay_cmd_priv_m(),
fb_fbpa_fbio_cmd_delay_cmd_priv_f(
cmd_idx)));
status = nvgpu_bios_execute_script(g, cmd_script_ptr);
if (status < 0) {
gk20a_writel(g, fb_fbpa_fbio_cmd_delay_r(),
old_fbio_cmd_delay);
goto done;
}
gk20a_writel(g, fb_fbpa_fbio_cmd_delay_r(),
old_fbio_cmd_delay);
}
mem_entry_ptr += memclock_table_header.base_entry_size +
memclock_table_header.strap_entry_count *
memclock_table_header.strap_entry_size;
}
done:
return status;
}
void clk_mclkseq_deinit_mclk_gddr5(struct gk20a *g)
{
struct clk_mclk_state *mclk = &g->clk_pmu.clk_mclk;
nvgpu_mutex_destroy(&mclk->data_lock);
nvgpu_mutex_destroy(&mclk->mclk_lock);
}
int clk_mclkseq_init_mclk_gddr5(struct gk20a *g)
{
struct clk_mclk_state *mclk;
int status;
struct clk_set_info *p5_info;
struct clk_set_info *p0_info;
int err;
gk20a_dbg_fn("");
mclk = &g->clk_pmu.clk_mclk;
err = nvgpu_mutex_init(&mclk->mclk_lock);
if (err)
return err;
err = nvgpu_mutex_init(&mclk->data_lock);
if (err)
goto fail_mclk_mutex;
/* FBPA gain WAR */
gk20a_writel(g, fb_fbpa_fbio_iref_byte_rx_ctrl_r(), 0x22222222);
mclk->speed = gk20a_mclk_low_speed; /* Value from Devinit */
/* Parse VBIOS */
status = mclk_get_memclk_table(g);
if (status < 0) {
err = status;
goto fail_data_mutex;
}
/* Load RAM pattern */
mclk_memory_load_training_pattern(g);
p5_info = pstate_get_clk_set_info(g,
CTRL_PERF_PSTATE_P5, clkwhich_mclk);
if (!p5_info) {
err = -EINVAL;
goto fail_data_mutex;
}
p0_info = pstate_get_clk_set_info(g,
CTRL_PERF_PSTATE_P0, clkwhich_mclk);
if (!p0_info) {
err = -EINVAL;
goto fail_data_mutex;
}
mclk->p5_min = p5_info->min_mhz;
mclk->p0_min = p0_info->min_mhz;
mclk->vreg_buf = nvgpu_kcalloc(g, VREG_COUNT, sizeof(u32));
if (!mclk->vreg_buf) {
nvgpu_err(g, "unable to allocate memory for VREG");
err = -ENOMEM;
goto fail_data_mutex;
}
#ifdef CONFIG_DEBUG_FS
if (!mclk->debugfs_set) {
if (mclk_debugfs_init(g))
mclk->debugfs_set = true;
}
#endif
mclk->change = clk_mclkseq_change_mclk_gddr5;
mclk->init = true;
return 0;
fail_data_mutex:
nvgpu_mutex_destroy(&mclk->data_lock);
fail_mclk_mutex:
nvgpu_mutex_destroy(&mclk->mclk_lock);
return err;
}
int clk_mclkseq_change_mclk_gddr5(struct gk20a *g, u16 val)
{
struct clk_mclk_state *mclk;
struct pmu_payload payload;
struct nv_pmu_seq_cmd cmd;
struct nv_pmu_seq_cmd_run_script *pseq_cmd;
u32 seqdesc;
int status = 0;
u32 seq_completion_status = ~0x0;
u8 *seq_script_ptr = NULL;
size_t seq_script_size = 0;
#ifdef CONFIG_DEBUG_FS
u64 t0, t1;
#endif
enum gk20a_mclk_speed speed;
gk20a_dbg_info("");
memset(&payload, 0, sizeof(struct pmu_payload));
mclk = &g->clk_pmu.clk_mclk;
nvgpu_mutex_acquire(&mclk->mclk_lock);
if (!mclk->init)
goto exit_status;
speed = (val < mclk->p5_min) ? gk20a_mclk_low_speed :
(val < mclk->p0_min) ? gk20a_mclk_mid_speed :
gk20a_mclk_high_speed;
if (speed == mclk->speed)
goto exit_status;
switch (speed) {
case gk20a_mclk_mid_speed:
if (mclk->speed == gk20a_mclk_low_speed) {
seq_script_ptr = seq_script_step33_gp106;
seq_script_size = sizeof(seq_script_step33_gp106);
} else {
seq_script_ptr = seq_script_step32_gp106;
seq_script_size = sizeof(seq_script_step32_gp106);
}
break;
case gk20a_mclk_high_speed:
seq_script_ptr = seq_script_step28_gp106;
seq_script_size = sizeof(seq_script_step28_gp106);
break;
case gk20a_mclk_low_speed:
if (mclk->speed == gk20a_mclk_mid_speed) {
seq_script_ptr = seq_script_step33_ls_gp106;
seq_script_size = sizeof(seq_script_step33_ls_gp106);
} else {
seq_script_ptr = seq_script_step32_ls_gp106;
seq_script_size = sizeof(seq_script_step32_ls_gp106);
}
break;
default:
nvgpu_err(g, "Illegal MCLK clock change");
status = -EINVAL;
goto exit_status;
}
/* Fill command header with SEQ ID & size */
memset(&cmd, 0, sizeof(cmd));
cmd.hdr.unit_id = PMU_UNIT_SEQ;
cmd.hdr.size = sizeof(struct nv_pmu_seq_cmd_run_script) +
sizeof(struct pmu_hdr);
/* Fill RM_PMU_SEQ_CMD_RUN_SCRIPT struct */
pseq_cmd = &cmd.run_script;
pseq_cmd->cmd_type = NV_PMU_SEQ_CMD_ID_RUN_SCRIPT;
#ifdef CONFIG_DEBUG_FS
g->ops.bus.read_ptimer(g, &t0);
#endif
if (speed == gk20a_mclk_high_speed) {
gk20a_writel(g, 0x132000, 0x98010000);
/* Introduce delay */
gk20a_readl(g, 0x132000);
gk20a_readl(g, 0x132000);
}
gk20a_writel(g, 0x137300, 0x20000103);
/* Read sequencer binary*/
payload.in.buf = seq_script_ptr;
payload.in.size = seq_script_size;
payload.in.fb_size = PMU_CMD_SUBMIT_PAYLOAD_PARAMS_FB_SIZE_UNUSED;
payload.in.offset = offsetof(struct nv_pmu_seq_cmd_run_script,
script_alloc);
memset(mclk->vreg_buf, 0, (sizeof(u32) * VREG_COUNT));
payload.out.buf = mclk->vreg_buf;
payload.out.size = (VREG_COUNT * sizeof(u32));
payload.out.fb_size = PMU_CMD_SUBMIT_PAYLOAD_PARAMS_FB_SIZE_UNUSED;
payload.out.offset = offsetof(struct nv_pmu_seq_cmd_run_script,
reg_alloc);
/* Send command to PMU to execute sequencer script */
status = gk20a_pmu_cmd_post(g, (struct pmu_cmd *)&cmd, NULL, &payload,
PMU_COMMAND_QUEUE_LPQ,
mclk_seq_pmucmdhandler,
&seq_completion_status, &seqdesc, ~0);
if (status) {
nvgpu_err(g, "unable to post seq script exec cmd for unit %x",
cmd.hdr.unit_id);
goto exit_status;
}
/* wait till sequencer script complete */
pmu_wait_message_cond(&g->pmu, (gk20a_get_gr_idle_timeout(g)),
&seq_completion_status, 0);
if (seq_completion_status != 0) {
nvgpu_err(g, "seq_script update failed");
status = -EBUSY;
goto exit_status;
}
mclk->speed = speed;
#ifdef CONFIG_DEBUG_FS
g->ops.bus.read_ptimer(g, &t1);
nvgpu_mutex_acquire(&mclk->data_lock);
mclk->switch_num++;
if (mclk->switch_num == 1) {
mclk->switch_max = mclk->switch_min =
mclk->switch_avg = (t1-t0)/1000;
mclk->switch_std = 0;
} else {
s64 prev_avg;
s64 curr = (t1-t0)/1000;
mclk->switch_max = curr > mclk->switch_max ?
curr : mclk->switch_max;
mclk->switch_min = mclk->switch_min ?
(curr < mclk->switch_min ?
curr : mclk->switch_min) : curr;
prev_avg = mclk->switch_avg;
mclk->switch_avg = (curr +
(mclk->switch_avg * (mclk->switch_num-1))) /
mclk->switch_num;
mclk->switch_std +=
(curr - mclk->switch_avg) * (curr - prev_avg);
}
nvgpu_mutex_release(&mclk->data_lock);
#endif
exit_status:
nvgpu_mutex_release(&mclk->mclk_lock);
return status;
}
#ifdef CONFIG_DEBUG_FS
static int mclk_debug_speed_set(void *data, u64 val)
{
struct gk20a *g = (struct gk20a *) data;
struct clk_mclk_state *mclk;
mclk = &g->clk_pmu.clk_mclk;
/* This is problematic because it can interrupt the arbiter
* and send it to sleep. we need to consider removing this
*/
if (mclk->change)
return mclk->change(g, (u16) val);
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(
mclk_debug_speed_set_fops,
NULL,
mclk_debug_speed_set,
"%llu\n"
);
static int mclk_switch_stats_show(struct seq_file *s, void *unused)
{
struct gk20a *g = s->private;
struct clk_mclk_state *mclk;
u64 num;
s64 tmp, avg, std, max, min;
mclk = &g->clk_pmu.clk_mclk;
/* Make copy of structure to reduce time with lock held */
nvgpu_mutex_acquire(&mclk->data_lock);
std = mclk->switch_std;
avg = mclk->switch_avg;
max = mclk->switch_max;
min = mclk->switch_min;
num = mclk->switch_num;
nvgpu_mutex_release(&mclk->data_lock);
tmp = std;
do_div(tmp, num);
seq_printf(s, "MCLK:\n number of transitions: %lld\n",
num);
seq_printf(s, "max / min : %lld / %lld usec\n",
max, min);
seq_printf(s, "avg / std : %lld / %ld usec\n",
avg, int_sqrt(tmp));
return 0;
}
static int mclk_switch_stats_open(struct inode *inode, struct file *file)
{
return single_open(file, mclk_switch_stats_show, inode->i_private);
}
static const struct file_operations mclk_switch_stats_fops = {
.open = mclk_switch_stats_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static int mclk_debugfs_init(struct gk20a *g)
{
struct gk20a_platform *platform = dev_get_drvdata(g->dev);
struct dentry *gpu_root = platform->debugfs;
struct dentry *d;
gk20a_dbg(gpu_dbg_info, "g=%p", g);
d = debugfs_create_file(
"mclk_speed_set",
S_IWUGO,
gpu_root,
g,
&mclk_debug_speed_set_fops);
if (!d)
return -ENOMEM;
d = debugfs_create_file(
"mclk_switch_stats",
S_IRUGO,
gpu_root,
g,
&mclk_switch_stats_fops);
if (!d)
return -ENOMEM;
return 0;
}
#endif