drm/nouveau/fb/ramnva3: Link training for DDR3

V2: fix whitespace errors in memx.fuc

Signed-off-by: Roy Spliet <rspliet@eclipso.eu>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Roy Spliet 2014-10-02 18:01:52 +02:00 committed by Ben Skeggs
parent f648cab0ad
commit 7f4b961618
10 changed files with 2333 additions and 1489 deletions

View File

@ -48,6 +48,8 @@ void nouveau_memx_wait(struct nouveau_memx *,
u32 addr, u32 mask, u32 data, u32 nsec);
void nouveau_memx_nsec(struct nouveau_memx *, u32 nsec);
void nouveau_memx_wait_vblank(struct nouveau_memx *);
void nouveau_memx_train(struct nouveau_memx *);
int nouveau_memx_train_result(struct nouveau_pwr *, u32 *, int);
void nouveau_memx_block(struct nouveau_memx *);
void nouveau_memx_unblock(struct nouveau_memx *);

View File

@ -140,6 +140,20 @@ ramfuc_wait_vblank(struct ramfuc *ram)
nouveau_memx_wait_vblank(ram->memx);
}
static inline void
ramfuc_train(struct ramfuc *ram)
{
nouveau_memx_train(ram->memx);
}
static inline int
ramfuc_train_result(struct nouveau_fb *pfb, u32 *result, u32 rsize)
{
struct nouveau_pwr *ppwr = nouveau_pwr(pfb);
return nouveau_memx_train_result(ppwr, result, rsize);
}
static inline void
ramfuc_block(struct ramfuc *ram)
{
@ -162,6 +176,8 @@ ramfuc_unblock(struct ramfuc *ram)
#define ram_wait(s,r,m,d,n) ramfuc_wait(&(s)->base, (r), (m), (d), (n))
#define ram_nsec(s,n) ramfuc_nsec(&(s)->base, (n))
#define ram_wait_vblank(s) ramfuc_wait_vblank(&(s)->base)
#define ram_train(s) ramfuc_train(&(s)->base)
#define ram_train_result(s,r,l) ramfuc_train_result((s), (r), (l))
#define ram_block(s) ramfuc_block(&(s)->base)
#define ram_unblock(s) ramfuc_unblock(&(s)->base)

View File

@ -20,17 +20,23 @@
* OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Ben Skeggs
* Roy Spliet <rspliet@eclipso.eu>
*/
#include <subdev/bios.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/pll.h>
#include <subdev/bios/rammap.h>
#include <subdev/bios/M0205.h>
#include <subdev/bios/timing.h>
#include <subdev/clock/nva3.h>
#include <subdev/clock/pll.h>
#include <subdev/timer.h>
#include <engine/fifo.h>
#include <core/option.h>
#include "ramfuc.h"
@ -39,11 +45,14 @@
struct nva3_ramfuc {
struct ramfuc base;
struct ramfuc_reg r_0x001610;
struct ramfuc_reg r_0x001700;
struct ramfuc_reg r_0x004000;
struct ramfuc_reg r_0x004004;
struct ramfuc_reg r_0x004018;
struct ramfuc_reg r_0x004128;
struct ramfuc_reg r_0x004168;
struct ramfuc_reg r_0x100080;
struct ramfuc_reg r_0x100200;
struct ramfuc_reg r_0x100210;
struct ramfuc_reg r_0x100220[9];
@ -56,6 +65,7 @@ struct nva3_ramfuc {
struct ramfuc_reg r_0x100714;
struct ramfuc_reg r_0x100718;
struct ramfuc_reg r_0x10071c;
struct ramfuc_reg r_0x100720;
struct ramfuc_reg r_0x100760;
struct ramfuc_reg r_0x1007a0;
struct ramfuc_reg r_0x1007e0;
@ -63,15 +73,276 @@ struct nva3_ramfuc {
struct ramfuc_reg r_0x1110e0;
struct ramfuc_reg r_0x111100;
struct ramfuc_reg r_0x111104;
struct ramfuc_reg r_0x1111e0;
struct ramfuc_reg r_0x111400;
struct ramfuc_reg r_0x611200;
struct ramfuc_reg r_mr[4];
};
struct nva3_ltrain {
enum {
NVA3_TRAIN_UNKNOWN,
NVA3_TRAIN_UNSUPPORTED,
NVA3_TRAIN_ONCE,
NVA3_TRAIN_EXEC,
NVA3_TRAIN_DONE
} state;
u32 r_100720;
u32 r_1111e0;
u32 r_111400;
struct nouveau_mem *mem;
};
struct nva3_ram {
struct nouveau_ram base;
struct nva3_ramfuc fuc;
struct nva3_ltrain ltrain;
};
void
nva3_link_train_calc(u32 *vals, struct nva3_ltrain *train)
{
int i, lo, hi;
u8 median[8], bins[4] = {0, 0, 0, 0}, bin = 0, qty = 0;
for (i = 0; i < 8; i++) {
for (lo = 0; lo < 0x40; lo++) {
if (!(vals[lo] & 0x80000000))
continue;
if (vals[lo] & (0x101 << i))
break;
}
if (lo == 0x40)
return;
for (hi = lo + 1; hi < 0x40; hi++) {
if (!(vals[lo] & 0x80000000))
continue;
if (!(vals[hi] & (0x101 << i))) {
hi--;
break;
}
}
median[i] = ((hi - lo) >> 1) + lo;
bins[(median[i] & 0xf0) >> 4]++;
median[i] += 0x30;
}
/* Find the best value for 0x1111e0 */
for (i = 0; i < 4; i++) {
if (bins[i] > qty) {
bin = i + 3;
qty = bins[i];
}
}
train->r_100720 = 0;
for (i = 0; i < 8; i++) {
median[i] = max(median[i], (u8) (bin << 4));
median[i] = min(median[i], (u8) ((bin << 4) | 0xf));
train->r_100720 |= ((median[i] & 0x0f) << (i << 2));
}
train->r_1111e0 = 0x02000000 | (bin * 0x101);
train->r_111400 = 0x0;
}
/*
* Link training for (at least) DDR3
*/
int
nva3_link_train(struct nouveau_fb *pfb)
{
struct nouveau_bios *bios = nouveau_bios(pfb);
struct nva3_ram *ram = (void *)pfb->ram;
struct nouveau_clock *clk = nouveau_clock(pfb);
struct nva3_ltrain *train = &ram->ltrain;
struct nouveau_device *device = nv_device(pfb);
struct nva3_ramfuc *fuc = &ram->fuc;
u32 *result, r1700;
int ret, i;
struct nvbios_M0205T M0205T = { 0 };
u8 ver, hdr, cnt, len, snr, ssz;
unsigned int clk_current;
unsigned long flags;
unsigned long *f = &flags;
if (nouveau_boolopt(device->cfgopt, "NvMemExec", true) != true)
return -ENOSYS;
/* XXX: Multiple partitions? */
result = kmalloc(64 * sizeof(u32), GFP_KERNEL);
if (!result)
return -ENOMEM;
train->state = NVA3_TRAIN_EXEC;
/* Clock speeds for training and back */
nvbios_M0205Tp(bios, &ver, &hdr, &cnt, &len, &snr, &ssz, &M0205T);
if (M0205T.freq == 0)
return -ENOENT;
clk_current = clk->read(clk, nv_clk_src_mem);
ret = nva3_clock_pre(clk, f);
if (ret)
goto out;
/* First: clock up/down */
ret = ram->base.calc(pfb, (u32) M0205T.freq * 1000);
if (ret)
goto out;
/* Do this *after* calc, eliminates write in script */
nv_wr32(pfb, 0x111400, 0x00000000);
/* XXX: Magic writes that improve train reliability? */
nv_mask(pfb, 0x100674, 0x0000ffff, 0x00000000);
nv_mask(pfb, 0x1005e4, 0x0000ffff, 0x00000000);
nv_mask(pfb, 0x100b0c, 0x000000ff, 0x00000000);
nv_wr32(pfb, 0x100c04, 0x00000400);
/* Now the training script */
r1700 = ram_rd32(fuc, 0x001700);
ram_mask(fuc, 0x100200, 0x00000800, 0x00000000);
ram_wr32(fuc, 0x611200, 0x3300);
ram_wait_vblank(fuc);
ram_wait(fuc, 0x611200, 0x00000003, 0x00000000, 500000);
ram_mask(fuc, 0x001610, 0x00000083, 0x00000003);
ram_mask(fuc, 0x100080, 0x00000020, 0x00000000);
ram_mask(fuc, 0x10f804, 0x80000000, 0x00000000);
ram_wr32(fuc, 0x001700, 0x00000000);
ram_train(fuc);
/* Reset */
ram_mask(fuc, 0x10f804, 0x80000000, 0x80000000);
ram_wr32(fuc, 0x10053c, 0x0);
ram_wr32(fuc, 0x100720, train->r_100720);
ram_wr32(fuc, 0x1111e0, train->r_1111e0);
ram_wr32(fuc, 0x111400, train->r_111400);
ram_nuke(fuc, 0x100080);
ram_mask(fuc, 0x100080, 0x00000020, 0x00000020);
ram_nsec(fuc, 1000);
ram_wr32(fuc, 0x001700, r1700);
ram_mask(fuc, 0x001610, 0x00000083, 0x00000080);
ram_wr32(fuc, 0x611200, 0x3330);
ram_mask(fuc, 0x100200, 0x00000800, 0x00000800);
ram_exec(fuc, true);
ram->base.calc(pfb, clk_current);
ram_exec(fuc, true);
/* Post-processing, avoids flicker */
nv_mask(pfb, 0x616308, 0x10, 0x10);
nv_mask(pfb, 0x616b08, 0x10, 0x10);
nva3_clock_post(clk, f);
ram_train_result(pfb, result, 64);
for (i = 0; i < 64; i++)
nv_debug(pfb, "Train: %08x", result[i]);
nva3_link_train_calc(result, train);
nv_debug(pfb, "Train: %08x %08x %08x", train->r_100720,
train->r_1111e0, train->r_111400);
kfree(result);
train->state = NVA3_TRAIN_DONE;
return ret;
out:
if(ret == -EBUSY)
f = NULL;
train->state = NVA3_TRAIN_UNSUPPORTED;
nva3_clock_post(clk, f);
return ret;
}
int
nva3_link_train_init(struct nouveau_fb *pfb)
{
static const u32 pattern[16] = {
0xaaaaaaaa, 0xcccccccc, 0xdddddddd, 0xeeeeeeee,
0x00000000, 0x11111111, 0x44444444, 0xdddddddd,
0x33333333, 0x55555555, 0x77777777, 0x66666666,
0x99999999, 0x88888888, 0xeeeeeeee, 0xbbbbbbbb,
};
struct nouveau_bios *bios = nouveau_bios(pfb);
struct nva3_ram *ram = (void *)pfb->ram;
struct nva3_ltrain *train = &ram->ltrain;
struct nouveau_mem *mem;
struct nvbios_M0205E M0205E;
u8 ver, hdr, cnt, len;
u32 r001700;
int ret, i = 0;
train->state = NVA3_TRAIN_UNSUPPORTED;
/* We support type "5"
* XXX: training pattern table appears to be unused for this routine */
if (!nvbios_M0205Ep(bios, i, &ver, &hdr, &cnt, &len, &M0205E))
return -ENOENT;
if (M0205E.type != 5)
return 0;
train->state = NVA3_TRAIN_ONCE;
ret = pfb->ram->get(pfb, 0x8000, 0x10000, 0, 0x800, &ram->ltrain.mem);
if (ret)
return ret;
mem = ram->ltrain.mem;
nv_wr32(pfb, 0x100538, 0x10000000 | (mem->offset >> 16));
nv_wr32(pfb, 0x1005a8, 0x0000ffff);
nv_mask(pfb, 0x10f800, 0x00000001, 0x00000001);
for (i = 0; i < 0x30; i++) {
nv_wr32(pfb, 0x10f8c0, (i << 8) | i);
nv_wr32(pfb, 0x10f900, pattern[i % 16]);
}
for (i = 0; i < 0x30; i++) {
nv_wr32(pfb, 0x10f8e0, (i << 8) | i);
nv_wr32(pfb, 0x10f920, pattern[i % 16]);
}
/* And upload the pattern */
r001700 = nv_rd32(pfb, 0x1700);
nv_wr32(pfb, 0x1700, mem->offset >> 16);
for (i = 0; i < 16; i++)
nv_wr32(pfb, 0x700000 + (i << 2), pattern[i]);
for (i = 0; i < 16; i++)
nv_wr32(pfb, 0x700100 + (i << 2), pattern[i]);
nv_wr32(pfb, 0x1700, r001700);
train->r_100720 = nv_rd32(pfb, 0x100720);
train->r_1111e0 = nv_rd32(pfb, 0x1111e0);
train->r_111400 = nv_rd32(pfb, 0x111400);
return 0;
}
void
nva3_link_train_fini(struct nouveau_fb *pfb)
{
struct nva3_ram *ram = (void *)pfb->ram;
if (ram->ltrain.mem)
pfb->ram->put(pfb, &ram->ltrain.mem);
}
static int
nva3_ram_calc(struct nouveau_fb *pfb, u32 freq)
{
@ -90,6 +361,9 @@ nva3_ram_calc(struct nouveau_fb *pfb, u32 freq)
next->freq = freq;
ram->base.next = next;
if (ram->ltrain.state == NVA3_TRAIN_ONCE)
nva3_link_train(pfb);
/* lookup memory config data relevant to the target frequency */
i = 0;
while ((data = nvbios_rammapEp(bios, i++, &ver, &hdr, &cnt, &len,
@ -330,39 +604,25 @@ nva3_ram_init(struct nouveau_object *object)
{
struct nouveau_fb *pfb = (void *)object->parent;
struct nva3_ram *ram = (void *)object;
int ret, i;
int ret;
ret = nouveau_ram_init(&ram->base);
if (ret)
return ret;
/* prepare for ddr link training, and load training patterns */
switch (ram->base.type) {
case NV_MEM_TYPE_DDR3: {
if (nv_device(pfb)->chipset == 0xa8) {
static const u32 pattern[16] = {
0xaaaaaaaa, 0xcccccccc, 0xdddddddd, 0xeeeeeeee,
0x00000000, 0x11111111, 0x44444444, 0xdddddddd,
0x33333333, 0x55555555, 0x77777777, 0x66666666,
0x99999999, 0x88888888, 0xeeeeeeee, 0xbbbbbbbb,
};
nva3_link_train_init(pfb);
nv_wr32(pfb, 0x100538, 0x10001ff6); /*XXX*/
nv_wr32(pfb, 0x1005a8, 0x0000ffff);
nv_mask(pfb, 0x10f800, 0x00000001, 0x00000001);
for (i = 0; i < 0x30; i++) {
nv_wr32(pfb, 0x10f8c0, (i << 8) | i);
nv_wr32(pfb, 0x10f8e0, (i << 8) | i);
nv_wr32(pfb, 0x10f900, pattern[i % 16]);
nv_wr32(pfb, 0x10f920, pattern[i % 16]);
}
}
}
break;
default:
break;
return 0;
}
static int
nva3_ram_fini(struct nouveau_object *object, bool suspend)
{
struct nouveau_fb *pfb = (void *)object->parent;
if (!suspend)
nva3_link_train_fini(pfb);
return 0;
}
@ -390,11 +650,14 @@ nva3_ram_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
return 0;
}
ram->fuc.r_0x001610 = ramfuc_reg(0x001610);
ram->fuc.r_0x001700 = ramfuc_reg(0x001700);
ram->fuc.r_0x004000 = ramfuc_reg(0x004000);
ram->fuc.r_0x004004 = ramfuc_reg(0x004004);
ram->fuc.r_0x004018 = ramfuc_reg(0x004018);
ram->fuc.r_0x004128 = ramfuc_reg(0x004128);
ram->fuc.r_0x004168 = ramfuc_reg(0x004168);
ram->fuc.r_0x100080 = ramfuc_reg(0x100080);
ram->fuc.r_0x100200 = ramfuc_reg(0x100200);
ram->fuc.r_0x100210 = ramfuc_reg(0x100210);
for (i = 0; i < 9; i++)
@ -408,6 +671,7 @@ nva3_ram_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
ram->fuc.r_0x100714 = ramfuc_reg(0x100714);
ram->fuc.r_0x100718 = ramfuc_reg(0x100718);
ram->fuc.r_0x10071c = ramfuc_reg(0x10071c);
ram->fuc.r_0x100720 = ramfuc_reg(0x100720);
ram->fuc.r_0x100760 = ramfuc_stride(0x100760, 4, ram->base.part_mask);
ram->fuc.r_0x1007a0 = ramfuc_stride(0x1007a0, 4, ram->base.part_mask);
ram->fuc.r_0x1007e0 = ramfuc_stride(0x1007e0, 4, ram->base.part_mask);
@ -415,6 +679,8 @@ nva3_ram_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
ram->fuc.r_0x1110e0 = ramfuc_stride(0x1110e0, 4, ram->base.part_mask);
ram->fuc.r_0x111100 = ramfuc_reg(0x111100);
ram->fuc.r_0x111104 = ramfuc_reg(0x111104);
ram->fuc.r_0x1111e0 = ramfuc_reg(0x1111e0);
ram->fuc.r_0x111400 = ramfuc_reg(0x111400);
ram->fuc.r_0x611200 = ramfuc_reg(0x611200);
if (ram->base.ranks > 1) {
@ -438,6 +704,6 @@ nva3_ram_oclass = {
.ctor = nva3_ram_ctor,
.dtor = _nouveau_ram_dtor,
.init = nva3_ram_init,
.fini = _nouveau_ram_fini,
.fini = nva3_ram_fini,
},
};

View File

@ -50,6 +50,7 @@ handler(WR32 , 0x0000, 0x0002, #memx_func_wr32)
handler(WAIT , 0x0004, 0x0000, #memx_func_wait)
handler(DELAY , 0x0001, 0x0000, #memx_func_delay)
handler(VBLANK, 0x0001, 0x0000, #memx_func_wait_vblank)
handler(TRAIN , 0x0000, 0x0000, #memx_func_train)
memx_func_tail:
.equ #memx_func_size #memx_func_next - #memx_func_head
@ -63,6 +64,10 @@ memx_ts_end:
memx_data_head:
.skip 0x0800
memx_data_tail:
memx_train_head:
.skip 0x0100
memx_train_tail:
#endif
/******************************************************************************
@ -257,6 +262,101 @@ memx_func_delay:
call(nsec)
ret
// description
//
// $r15 - current (memx)
// $r4 - packet length
// $r3 - opcode desciption
// $r0 - zero
memx_func_train:
#if NVKM_PPWR_CHIPSET == GT215
// $r5 - outer loop counter
// $r6 - inner loop counter
// $r7 - entry counter (#memx_train_head + $r7)
movw $r5 0x3
movw $r7 0x0
// Read random memory to wake up... things
imm32($r9, 0x700000)
nv_rd32($r8,$r9)
movw $r14 0x2710
call(nsec)
memx_func_train_loop_outer:
mulu $r8 $r5 0x101
sethi $r8 0x02000000
imm32($r9, 0x1111e0)
nv_wr32($r9, $r8)
push $r5
movw $r6 0x0
memx_func_train_loop_inner:
movw $r8 0x1111
mulu $r9 $r6 $r8
shl b32 $r8 $r9 0x10
or $r8 $r9
imm32($r9, 0x100720)
nv_wr32($r9, $r8)
imm32($r9, 0x100080)
nv_rd32($r8, $r9)
or $r8 $r8 0x20
nv_wr32($r9, $r8)
imm32($r9, 0x10053c)
imm32($r8, 0x80003002)
nv_wr32($r9, $r8)
imm32($r14, 0x100560)
imm32($r13, 0x80000000)
add b32 $r12 $r13 0
imm32($r11, 0x001e8480)
call(wait)
// $r5 - inner inner loop counter
// $r9 - result
movw $r5 0
imm32($r9, 0x8300ffff)
memx_func_train_loop_4x:
imm32($r10, 0x100080)
nv_rd32($r8, $r10)
imm32($r11, 0xffffffdf)
and $r8 $r11
nv_wr32($r10, $r8)
imm32($r10, 0x10053c)
imm32($r8, 0x80003002)
nv_wr32($r10, $r8)
imm32($r14, 0x100560)
imm32($r13, 0x80000000)
mov b32 $r12 $r13
imm32($r11, 0x00002710)
call(wait)
nv_rd32($r13, $r14)
and $r9 $r9 $r13
add b32 $r5 1
cmp b16 $r5 0x4
bra l #memx_func_train_loop_4x
add b32 $r10 $r7 #memx_train_head
st b32 D[$r10 + 0] $r9
add b32 $r6 1
add b32 $r7 4
cmp b16 $r6 0x10
bra l #memx_func_train_loop_inner
pop $r5
add b32 $r5 1
cmp b16 $r5 7
bra l #memx_func_train_loop_outer
#endif
ret
// description
//
// $r15 - current (memx)
@ -307,8 +407,19 @@ memx_exec:
// $r11 - data1
// $r0 - zero
memx_info:
cmp b16 $r12 0x1
bra e #memx_info_train
memx_info_data:
mov $r12 #memx_data_head
mov $r11 #memx_data_tail - #memx_data_head
bra #memx_info_send
memx_info_train:
mov $r12 #memx_train_head
mov $r11 #memx_train_tail - #memx_train_head
memx_info_send:
call(send)
ret

View File

@ -46,8 +46,8 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x584d454d,
0x0000061c,
0x0000060e,
0x0000062d,
0x0000061f,
0x00000000,
0x00000000,
0x00000000,
@ -68,8 +68,8 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x46524550,
0x00000620,
0x0000061e,
0x00000631,
0x0000062f,
0x00000000,
0x00000000,
0x00000000,
@ -90,8 +90,8 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x5f433249,
0x00000a24,
0x000008cb,
0x00000a35,
0x000008dc,
0x00000000,
0x00000000,
0x00000000,
@ -112,8 +112,8 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x54534554,
0x00000a45,
0x00000a26,
0x00000a56,
0x00000a37,
0x00000000,
0x00000000,
0x00000000,
@ -134,8 +134,8 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x454c4449,
0x00000a50,
0x00000a4e,
0x00000a61,
0x00000a5f,
0x00000000,
0x00000000,
0x00000000,
@ -246,13 +246,15 @@ uint32_t nv108_pwr_data[] = {
0x00010006,
0x00000000,
0x0000057b,
/* 0x03b8: memx_func_tail */
/* 0x03b8: memx_ts_start */
0x00000007,
0x00000000,
/* 0x03bc: memx_ts_end */
0x000005c3,
/* 0x03c4: memx_func_tail */
/* 0x03c4: memx_ts_start */
0x00000000,
/* 0x03c0: memx_data_head */
/* 0x03c8: memx_ts_end */
0x00000000,
/* 0x03cc: memx_data_head */
0x00000000,
0x00000000,
0x00000000,
@ -764,8 +766,75 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x00000000,
/* 0x0bc0: memx_data_tail */
/* 0x0bc0: i2c_scl_map */
0x00000000,
/* 0x0bcc: memx_data_tail */
/* 0x0bcc: memx_train_head */
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
/* 0x0ccc: i2c_scl_map */
0x00000400,
0x00000800,
0x00001000,
@ -776,7 +845,7 @@ uint32_t nv108_pwr_data[] = {
0x00020000,
0x00040000,
0x00080000,
/* 0x0be8: i2c_sda_map */
/* 0x0cf4: i2c_sda_map */
0x00100000,
0x00200000,
0x00400000,
@ -844,9 +913,6 @@ uint32_t nv108_pwr_data[] = {
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
};
uint32_t nv108_pwr_code[] = {
@ -1215,10 +1281,10 @@ uint32_t nv108_pwr_code[] = {
0xf40464f0,
0x2c06f70b,
0xb50066cf,
0x00f8ee06,
0x00f8f106,
/* 0x0500: memx_func_leave */
0x66cf2c06,
0xef06b500,
0xf206b500,
0xe4400406,
0x0006f607,
/* 0x0512: memx_func_leave_wait */
@ -1270,370 +1336,374 @@ uint32_t nv108_pwr_code[] = {
0x9800f800,
0x10b6001e,
0x005d7e04,
/* 0x05c3: memx_exec */
0xf900f800,
0xb2d0f9e0,
/* 0x05cb: memx_exec_next */
0x98b2b2c1,
0x10b60013,
0xf034e704,
0xe033e701,
0x0132b601,
0x980c30f0,
0x55f9de35,
0x1ef412a6,
0xee0b98e5,
0xbbef0c98,
0xc44b02cb,
0x00bbcf07,
0xe0fcd0fc,
0x0002c27e,
/* 0x0602: memx_info */
0xc04c00f8,
/* 0x05c3: memx_func_train */
0xf800f800,
/* 0x05c5: memx_exec */
0xf9e0f900,
0xb2c1b2d0,
/* 0x05cd: memx_exec_next */
0x001398b2,
0xe70410b6,
0xe701f034,
0xb601e033,
0x30f00132,
0xde35980c,
0x12a655f9,
0x98e51ef4,
0x0c98f10b,
0x02cbbbf2,
0xcf07c44b,
0xd0fc00bb,
0xc27ee0fc,
0x00f80002,
/* 0x0604: memx_info */
0xf401c670,
/* 0x060a: memx_info_data */
0xcc4c0c0b,
0x08004b03,
0x0002c27e,
/* 0x060e: memx_recv */
0xd6b000f8,
0xb20bf401,
0xf400d6b0,
0x00f8eb0b,
/* 0x061c: memx_init */
/* 0x061e: perf_recv */
0x00f800f8,
/* 0x0620: perf_init */
/* 0x0622: i2c_drive_scl */
0x36b000f8,
0x0d0bf400,
0xf607e040,
0x04bd0001,
/* 0x0632: i2c_drive_scl_lo */
0xe44000f8,
0x0001f607,
0x00f804bd,
/* 0x063c: i2c_drive_sda */
0xf40036b0,
0xe0400d0b,
0x0002f607,
0x00f804bd,
/* 0x064c: i2c_drive_sda_lo */
0xf607e440,
0x04bd0002,
/* 0x0656: i2c_sense_scl */
0x32f400f8,
0x07c44301,
0xfd0033cf,
0x0bf40431,
0x0131f406,
/* 0x0668: i2c_sense_scl_done */
/* 0x066a: i2c_sense_sda */
0x32f400f8,
0x07c44301,
0xfd0033cf,
0x0bf40432,
0x0131f406,
/* 0x067c: i2c_sense_sda_done */
/* 0x067e: i2c_raise_scl */
0x40f900f8,
0x03089844,
0x06227e01,
/* 0x0689: i2c_raise_scl_wait */
0x03e84e00,
0x00005d7e,
0x0006567e,
0xb60901f4,
0x1bf40142,
/* 0x069d: i2c_raise_scl_done */
0xf840fcef,
/* 0x06a1: i2c_start */
0x06567e00,
0x0d11f400,
0x00066a7e,
0xf40611f4,
/* 0x06b2: i2c_start_rep */
0x00032e0e,
0x0006227e,
0x3c7e0103,
0x76bb0006,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb600067e,
0x11f40464,
/* 0x06dd: i2c_start_send */
0x7e00031d,
0x4e00063c,
0x5d7e1388,
0x00030000,
0x0006227e,
0x7e13884e,
/* 0x06f7: i2c_start_out */
0xf800005d,
/* 0x06f9: i2c_stop */
0x7e000300,
0x03000622,
0x063c7e00,
0x03e84e00,
0x00005d7e,
0x227e0103,
0x884e0006,
0x005d7e13,
0x7e010300,
0x4e00063c,
0x5d7e1388,
0x00f80000,
/* 0x0728: i2c_bitw */
0x00063c7e,
0x7e03e84e,
0xbb00005d,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x00067e7e,
0xf40464b6,
0x884e1711,
0x005d7e13,
0x7e000300,
0x4e000622,
0x5d7e1388,
/* 0x0766: i2c_bitw_out */
0x00f80000,
/* 0x0768: i2c_bitr */
0x3c7e0103,
/* 0x0613: memx_info_train */
0x4c090ef4,
0x004b0bcc,
/* 0x0619: memx_info_send */
0x02c27e01,
/* 0x061f: memx_recv */
0xb000f800,
0x0bf401d6,
0x00d6b0a3,
0xf8dc0bf4,
/* 0x062d: memx_init */
/* 0x062f: perf_recv */
0xf800f800,
/* 0x0631: perf_init */
/* 0x0633: i2c_drive_scl */
0xb000f800,
0x0bf40036,
0x07e0400d,
0xbd0001f6,
/* 0x0643: i2c_drive_scl_lo */
0x4000f804,
0x01f607e4,
0xf804bd00,
/* 0x064d: i2c_drive_sda */
0x0036b000,
0x400d0bf4,
0x02f607e0,
0xf804bd00,
/* 0x065d: i2c_drive_sda_lo */
0x07e44000,
0xbd0002f6,
/* 0x0667: i2c_sense_scl */
0xf400f804,
0xc4430132,
0x0033cf07,
0xf40431fd,
0x31f4060b,
/* 0x0679: i2c_sense_scl_done */
/* 0x067b: i2c_sense_sda */
0xf400f801,
0xc4430132,
0x0033cf07,
0xf40432fd,
0x31f4060b,
/* 0x068d: i2c_sense_sda_done */
/* 0x068f: i2c_raise_scl */
0xf900f801,
0x08984440,
0x337e0103,
/* 0x069a: i2c_raise_scl_wait */
0xe84e0006,
0x005d7e03,
0x0076bb00,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x7e7e50fc,
0x64b60006,
0x1a11f404,
0x00066a7e,
0x227e0003,
0x884e0006,
0x005d7e13,
0x013cf000,
/* 0x07ab: i2c_bitr_done */
0xf80131f4,
/* 0x07ad: i2c_get_byte */
0x04000500,
/* 0x07b1: i2c_get_byte_next */
0x0154b608,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x07687e50,
0x0464b600,
0xfd2a11f4,
0x42b60553,
0xd81bf401,
0x76bb0103,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb6000728,
/* 0x07fa: i2c_get_byte_done */
0x00f80464,
/* 0x07fc: i2c_put_byte */
/* 0x07fe: i2c_put_byte_next */
0x42b60804,
0x3854ff01,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x07287e50,
0x0464b600,
0xb03411f4,
0x1bf40046,
0x0076bbd8,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x687e50fc,
0x64b60007,
0x0f11f404,
0xb00076bb,
0x1bf40136,
0x0132f406,
/* 0x0854: i2c_put_byte_done */
/* 0x0856: i2c_addr */
0x76bb00f8,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb60006a1,
0x11f40464,
0x2ec3e729,
0x0134b601,
0xbb0553fd,
0x06677e00,
0x0901f400,
0xf40142b6,
/* 0x06ae: i2c_raise_scl_done */
0x40fcef1b,
/* 0x06b2: i2c_start */
0x677e00f8,
0x11f40006,
0x067b7e0d,
0x0611f400,
/* 0x06c3: i2c_start_rep */
0x032e0ef4,
0x06337e00,
0x7e010300,
0xbb00064d,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0007fc7e,
/* 0x089b: i2c_addr_done */
0xf80464b6,
/* 0x089d: i2c_acquire_addr */
0xf8cec700,
0xb705e4b6,
0xf8d014e0,
/* 0x08a9: i2c_acquire */
0x089d7e00,
0x00047e00,
0x03d9f000,
0x00002e7e,
/* 0x08ba: i2c_release */
0x9d7e00f8,
0x047e0008,
0xdaf00000,
0x002e7e03,
/* 0x08cb: i2c_recv */
0xf400f800,
0xc1c70132,
0x0214b6f8,
0xf52816b0,
0xb801371f,
0x000be813,
0xb8003298,
0x000bc013,
0xf4003198,
0xd0f90231,
0xd0f9e0f9,
0x000067f1,
0x100063f1,
0xbb016792,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0008a97e,
0xfc0464b6,
0x00d6b0d0,
0x00b01bf5,
0x76bb0005,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb6000856,
0x11f50464,
0xc5c700cc,
0x0076bbe0,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0xfc7e50fc,
0x64b60007,
0xa911f504,
0xbb010500,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0008567e,
0xf50464b6,
0xbb008711,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0007ad7e,
0x00068f7e,
0xf40464b6,
0x5bcb6711,
0x0076bbe0,
/* 0x06ee: i2c_start_send */
0x00031d11,
0x00064d7e,
0x7e13884e,
0x0300005d,
0x06337e00,
0x13884e00,
0x00005d7e,
/* 0x0708: i2c_start_out */
/* 0x070a: i2c_stop */
0x000300f8,
0x0006337e,
0x4d7e0003,
0xe84e0006,
0x005d7e03,
0x7e010300,
0x4e000633,
0x5d7e1388,
0x01030000,
0x00064d7e,
0x7e13884e,
0xf800005d,
/* 0x0739: i2c_bitw */
0x064d7e00,
0x03e84e00,
0x00005d7e,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x068f7e50,
0x0464b600,
0x4e1711f4,
0x5d7e1388,
0x00030000,
0x0006337e,
0x7e13884e,
/* 0x0777: i2c_bitw_out */
0xf800005d,
/* 0x0779: i2c_bitr */
0x7e010300,
0x4e00064d,
0x5d7e03e8,
0x76bb0000,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb600068f,
0x11f40464,
0x067b7e1a,
0x7e000300,
0x4e000633,
0x5d7e1388,
0x3cf00000,
0x0131f401,
/* 0x07bc: i2c_bitr_done */
/* 0x07be: i2c_get_byte */
0x000500f8,
/* 0x07c2: i2c_get_byte_next */
0x54b60804,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0xf97e50fc,
0x64b60006,
0xbd5bb204,
0x410ef474,
/* 0x09d0: i2c_recv_not_rd08 */
0xf401d6b0,
0x00053b1b,
0x0008567e,
0xc73211f4,
0xfc7ee0c5,
0x11f40007,
0x7e000528,
0xf4000856,
0xb5c71f11,
0x07fc7ee0,
0x1511f400,
0x0006f97e,
0xc5c774bd,
0x091bf408,
0xf40232f4,
/* 0x0a0e: i2c_recv_not_wr08 */
/* 0x0a0e: i2c_recv_done */
0xcec7030e,
0x08ba7ef8,
0xfce0fc00,
0x0912f4d0,
0xc27e7cb2,
/* 0x0a22: i2c_recv_exit */
0x00f80002,
/* 0x0a24: i2c_init */
/* 0x0a26: test_recv */
0x584100f8,
0x0011cf04,
0x400110b6,
0x01f60458,
0xf104bd00,
0xf1d900e7,
0x7e134fe3,
0xf8000201,
/* 0x0a45: test_init */
0x08004e00,
0x0002017e,
/* 0x0a4e: idle_recv */
0x00f800f8,
/* 0x0a50: idle */
0x410031f4,
0x11cf0454,
0x797e50fc,
0x64b60007,
0x2a11f404,
0xb60553fd,
0x1bf40142,
0xbb0103d8,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0007397e,
/* 0x080b: i2c_get_byte_done */
0xf80464b6,
/* 0x080d: i2c_put_byte */
/* 0x080f: i2c_put_byte_next */
0xb6080400,
0x54ff0142,
0x0076bb38,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x397e50fc,
0x64b60007,
0x3411f404,
0xf40046b0,
0x76bbd81b,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb6000779,
0x11f40464,
0x0076bb0f,
0xf40136b0,
0x32f4061b,
/* 0x0865: i2c_put_byte_done */
/* 0x0867: i2c_addr */
0xbb00f801,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0006b27e,
0xf40464b6,
0xc3e72911,
0x34b6012e,
0x0553fd01,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x080d7e50,
0x0464b600,
/* 0x08ac: i2c_addr_done */
/* 0x08ae: i2c_acquire_addr */
0xcec700f8,
0x05e4b6f8,
0xd014e0b7,
/* 0x08ba: i2c_acquire */
0xae7e00f8,
0x047e0008,
0xd9f00000,
0x002e7e03,
/* 0x08cb: i2c_release */
0x7e00f800,
0x7e0008ae,
0xf0000004,
0x2e7e03da,
0x00f80000,
/* 0x08dc: i2c_recv */
0xc70132f4,
0x14b6f8c1,
0x2816b002,
0x01371ff5,
0x0cf413b8,
0x00329800,
0x0ccc13b8,
0x00319800,
0xf90231f4,
0xf9e0f9d0,
0x0067f1d0,
0x0063f100,
0x01679210,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x08ba7e50,
0x0464b600,
0xd6b0d0fc,
0xb01bf500,
0xbb000500,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x0008677e,
0xf50464b6,
0xc700cc11,
0x76bbe0c5,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb600080d,
0x11f50464,
0x010500a9,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x08677e50,
0x0464b600,
0x008711f5,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x07be7e50,
0x0464b600,
0xcb6711f4,
0x76bbe05b,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
0xb600070a,
0x5bb20464,
0x0ef474bd,
/* 0x09e1: i2c_recv_not_rd08 */
0x01d6b041,
0x053b1bf4,
0x08677e00,
0x3211f400,
0x7ee0c5c7,
0xf400080d,
0x00052811,
0x0008677e,
0xc71f11f4,
0x0d7ee0b5,
0x11f40008,
0x070a7e15,
0xc774bd00,
0x1bf408c5,
0x0232f409,
/* 0x0a1f: i2c_recv_not_wr08 */
/* 0x0a1f: i2c_recv_done */
0xc7030ef4,
0xcb7ef8ce,
0xe0fc0008,
0x12f4d0fc,
0x7e7cb209,
/* 0x0a33: i2c_recv_exit */
0xf80002c2,
/* 0x0a35: i2c_init */
/* 0x0a37: test_recv */
0x4100f800,
0x11cf0458,
0x0110b600,
0xf6045440,
0xf6045840,
0x04bd0001,
/* 0x0a64: idle_loop */
0x32f45801,
/* 0x0a69: idle_proc */
/* 0x0a69: idle_proc_exec */
0xb210f902,
0x02cb7e1e,
0xf410fc00,
0x31f40911,
0xf00ef402,
/* 0x0a7c: idle_proc_next */
0xa65810b6,
0xe81bf41f,
0xf4e002f4,
0x0ef40028,
0x000000c6,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0xd900e7f1,
0x134fe3f1,
0x0002017e,
/* 0x0a56: test_init */
0x004e00f8,
0x02017e08,
/* 0x0a5f: idle_recv */
0xf800f800,
/* 0x0a61: idle */
0x0031f400,
0xcf045441,
0x10b60011,
0x04544001,
0xbd0001f6,
/* 0x0a75: idle_loop */
0xf4580104,
/* 0x0a7a: idle_proc */
/* 0x0a7a: idle_proc_exec */
0x10f90232,
0xcb7e1eb2,
0x10fc0002,
0xf40911f4,
0x0ef40231,
/* 0x0a8d: idle_proc_next */
0x5810b6f0,
0x1bf41fa6,
0xe002f4e8,
0xf40028f4,
0x0000c60e,
0x00000000,
0x00000000,
0x00000000,

File diff suppressed because it is too large Load Diff

View File

@ -46,8 +46,8 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x584d454d,
0x0000074b,
0x0000073d,
0x0000075e,
0x00000750,
0x00000000,
0x00000000,
0x00000000,
@ -68,8 +68,8 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x46524550,
0x0000074f,
0x0000074d,
0x00000762,
0x00000760,
0x00000000,
0x00000000,
0x00000000,
@ -90,8 +90,8 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x5f433249,
0x00000b7f,
0x00000a22,
0x00000b92,
0x00000a35,
0x00000000,
0x00000000,
0x00000000,
@ -112,8 +112,8 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x54534554,
0x00000ba8,
0x00000b81,
0x00000bbb,
0x00000b94,
0x00000000,
0x00000000,
0x00000000,
@ -134,8 +134,8 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x454c4449,
0x00000bb4,
0x00000bb2,
0x00000bc7,
0x00000bc5,
0x00000000,
0x00000000,
0x00000000,
@ -246,13 +246,15 @@ uint32_t nvc0_pwr_data[] = {
0x00010006,
0x00000000,
0x00000663,
/* 0x03b8: memx_func_tail */
/* 0x03b8: memx_ts_start */
0x00000007,
0x00000000,
/* 0x03bc: memx_ts_end */
0x000006e9,
/* 0x03c4: memx_func_tail */
/* 0x03c4: memx_ts_start */
0x00000000,
/* 0x03c0: memx_data_head */
/* 0x03c8: memx_ts_end */
0x00000000,
/* 0x03cc: memx_data_head */
0x00000000,
0x00000000,
0x00000000,
@ -764,8 +766,75 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x00000000,
/* 0x0bc0: memx_data_tail */
/* 0x0bc0: i2c_scl_map */
0x00000000,
/* 0x0bcc: memx_data_tail */
/* 0x0bcc: memx_train_head */
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
/* 0x0ccc: i2c_scl_map */
0x00001000,
0x00004000,
0x00010000,
@ -776,7 +845,7 @@ uint32_t nvc0_pwr_data[] = {
0x01000000,
0x04000000,
0x10000000,
/* 0x0be8: i2c_sda_map */
/* 0x0cf4: i2c_sda_map */
0x00002000,
0x00008000,
0x00020000,
@ -787,7 +856,7 @@ uint32_t nvc0_pwr_data[] = {
0x02000000,
0x08000000,
0x20000000,
/* 0x0c10: i2c_ctrl */
/* 0x0d1c: i2c_ctrl */
0x0000e138,
0x0000e150,
0x0000e168,
@ -845,9 +914,6 @@ uint32_t nvc0_pwr_data[] = {
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
};
uint32_t nvc0_pwr_code[] = {
@ -1272,10 +1338,10 @@ uint32_t nvc0_pwr_code[] = {
0xcf0664b6,
0x06800066,
/* 0x05db: memx_func_leave */
0xf000f8ee,
0xf000f8f1,
0x64b62c67,
0x0066cf06,
0xf0ef0680,
0xf0f20680,
0x07f10467,
0x04b607e4,
0x0006d006,
@ -1350,382 +1416,450 @@ uint32_t nvc0_pwr_code[] = {
0x1e9800f8,
0x0410b600,
0xf87f21f4,
/* 0x06e9: memx_exec */
0xf9e0f900,
0x02c1b9d0,
/* 0x06f3: memx_exec_next */
0x9802b2b9,
0x10b60013,
0xf034e704,
0xe033e701,
0x0132b601,
0x980c30f0,
0x55f9de35,
0xf40612b8,
0x0b98e41e,
0xef0c98ee,
0xf102cbbb,
0xb607c4b7,
0xbbcf06b4,
0xfcd0fc00,
0x4221f5e0,
/* 0x072f: memx_info */
0xf100f803,
0xf103c0c7,
0xf50800b7,
/* 0x06e9: memx_func_train */
/* 0x06eb: memx_exec */
0xf900f800,
0xb9d0f9e0,
0xb2b902c1,
/* 0x06f5: memx_exec_next */
0x00139802,
0xe70410b6,
0xe701f034,
0xb601e033,
0x30f00132,
0xde35980c,
0x12b855f9,
0xe41ef406,
0x98f10b98,
0xcbbbf20c,
0xc4b7f102,
0x06b4b607,
0xfc00bbcf,
0xf5e0fcd0,
0xf8034221,
/* 0x073d: memx_recv */
0x01d6b000,
0xb0a90bf4,
0x0bf400d6,
/* 0x074b: memx_init */
0xf800f8e9,
/* 0x074d: perf_recv */
/* 0x074f: perf_init */
0xf800f800,
/* 0x0751: i2c_drive_scl */
0x0036b000,
0xf1110bf4,
0xb607e007,
0x01d00604,
0xf804bd00,
/* 0x0765: i2c_drive_scl_lo */
0xe407f100,
0x0604b607,
0xbd0001d0,
/* 0x0773: i2c_drive_sda */
0xb000f804,
0x0bf40036,
0xe007f111,
0x0604b607,
0xbd0002d0,
/* 0x0787: i2c_drive_sda_lo */
0xf100f804,
0xb607e407,
0x02d00604,
0xf804bd00,
/* 0x0795: i2c_sense_scl */
0x0132f400,
0x07c437f1,
0xcf0634b6,
0x31fd0033,
0x060bf404,
/* 0x07ab: i2c_sense_scl_done */
0xf80131f4,
/* 0x07ad: i2c_sense_sda */
0x0132f400,
0x07c437f1,
0xcf0634b6,
0x32fd0033,
0x060bf404,
/* 0x07c3: i2c_sense_sda_done */
0xf80131f4,
/* 0x07c5: i2c_raise_scl */
0xf140f900,
0xf0089847,
0x21f50137,
/* 0x07d2: i2c_raise_scl_wait */
0xe7f10751,
0x21f403e8,
0x9521f57f,
0x0901f407,
0xf40142b6,
/* 0x07e6: i2c_raise_scl_done */
0x40fcef1b,
/* 0x07ea: i2c_start */
0x21f500f8,
0x11f40795,
0xad21f50d,
0x0611f407,
/* 0x07fb: i2c_start_rep */
0xf0300ef4,
/* 0x0731: memx_info */
0x01c67000,
/* 0x0737: memx_info_data */
0xf10e0bf4,
0xf103ccc7,
0xf40800b7,
/* 0x0742: memx_info_train */
0xc7f10b0e,
0xb7f10bcc,
/* 0x074a: memx_info_send */
0x21f50100,
0x00f80342,
/* 0x0750: memx_recv */
0xf401d6b0,
0xd6b0980b,
0xd80bf400,
/* 0x075e: memx_init */
0x00f800f8,
/* 0x0760: perf_recv */
/* 0x0762: perf_init */
0x00f800f8,
/* 0x0764: i2c_drive_scl */
0xf40036b0,
0x07f1110b,
0x04b607e0,
0x0001d006,
0x00f804bd,
/* 0x0778: i2c_drive_scl_lo */
0x07e407f1,
0xd00604b6,
0x04bd0001,
/* 0x0786: i2c_drive_sda */
0x36b000f8,
0x110bf400,
0x07e007f1,
0xd00604b6,
0x04bd0002,
/* 0x079a: i2c_drive_sda_lo */
0x07f100f8,
0x04b607e4,
0x0002d006,
0x00f804bd,
/* 0x07a8: i2c_sense_scl */
0xf10132f4,
0xb607c437,
0x33cf0634,
0x0431fd00,
0xf4060bf4,
/* 0x07be: i2c_sense_scl_done */
0x00f80131,
/* 0x07c0: i2c_sense_sda */
0xf10132f4,
0xb607c437,
0x33cf0634,
0x0432fd00,
0xf4060bf4,
/* 0x07d6: i2c_sense_sda_done */
0x00f80131,
/* 0x07d8: i2c_raise_scl */
0x47f140f9,
0x37f00898,
0x6421f501,
/* 0x07e5: i2c_raise_scl_wait */
0xe8e7f107,
0x7f21f403,
0x07a821f5,
0xb60901f4,
0x1bf40142,
/* 0x07f9: i2c_raise_scl_done */
0xf840fcef,
/* 0x07fd: i2c_start */
0xa821f500,
0x0d11f407,
0x07c021f5,
0xf40611f4,
/* 0x080e: i2c_start_rep */
0x37f0300e,
0x6421f500,
0x0137f007,
0x078621f5,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xd821f550,
0x0464b607,
/* 0x083b: i2c_start_send */
0xf01f11f4,
0x21f50037,
0x37f00751,
0x7321f501,
0x0076bb07,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b607c5,
0x1f11f404,
/* 0x0828: i2c_start_send */
0xf50037f0,
0xf1077321,
0xf41388e7,
0x37f07f21,
0x5121f500,
0x88e7f107,
0x7f21f413,
/* 0x0844: i2c_start_out */
/* 0x0846: i2c_stop */
0x37f000f8,
0x5121f500,
0x0037f007,
0x077321f5,
0x03e8e7f1,
0xf07f21f4,
0x21f50137,
0xe7f10751,
0xe7f10786,
0x21f41388,
0x0137f07f,
0x077321f5,
0x0037f07f,
0x076421f5,
0x1388e7f1,
/* 0x0857: i2c_start_out */
0xf87f21f4,
/* 0x0879: i2c_bitw */
0x7321f500,
0xe8e7f107,
0x7f21f403,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xc521f550,
0x0464b607,
0xf11811f4,
0xf41388e7,
/* 0x0859: i2c_stop */
0x0037f000,
0x076421f5,
0xf50037f0,
0xf1078621,
0xf403e8e7,
0x37f07f21,
0x5121f500,
0x6421f501,
0x88e7f107,
0x7f21f413,
/* 0x08b8: i2c_bitw_out */
/* 0x08ba: i2c_bitr */
0x37f000f8,
0x7321f501,
0xe8e7f107,
0x7f21f403,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xc521f550,
0x0464b607,
0xf51b11f4,
0xf007ad21,
0x21f50037,
0xe7f10751,
0xf50137f0,
0xf1078621,
0xf41388e7,
0x00f87f21,
/* 0x088c: i2c_bitw */
0x078621f5,
0x03e8e7f1,
0xbb7f21f4,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x07d821f5,
0xf40464b6,
0xe7f11811,
0x21f41388,
0x013cf07f,
/* 0x08ff: i2c_bitr_done */
0xf80131f4,
/* 0x0901: i2c_get_byte */
0x0057f000,
/* 0x0907: i2c_get_byte_next */
0xb60847f0,
0x76bb0154,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb608ba21,
0x11f40464,
0x0553fd2b,
0xf40142b6,
0x37f0d81b,
0x0037f07f,
0x076421f5,
0x1388e7f1,
/* 0x08cb: i2c_bitw_out */
0xf87f21f4,
/* 0x08cd: i2c_bitr */
0x0137f000,
0x078621f5,
0x03e8e7f1,
0xbb7f21f4,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x07d821f5,
0xf40464b6,
0x21f51b11,
0x37f007c0,
0x6421f500,
0x88e7f107,
0x7f21f413,
0xf4013cf0,
/* 0x0912: i2c_bitr_done */
0x00f80131,
/* 0x0914: i2c_get_byte */
0xf00057f0,
/* 0x091a: i2c_get_byte_next */
0x54b60847,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b60879,
/* 0x0951: i2c_get_byte_done */
/* 0x0953: i2c_put_byte */
0xf000f804,
/* 0x0956: i2c_put_byte_next */
0x42b60847,
0x3854ff01,
0x64b608cd,
0x2b11f404,
0xb60553fd,
0x1bf40142,
0x0137f0d8,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x7921f550,
0x8c21f550,
0x0464b608,
0xb03411f4,
0x1bf40046,
0x0076bbd8,
/* 0x0964: i2c_get_byte_done */
/* 0x0966: i2c_put_byte */
0x47f000f8,
/* 0x0969: i2c_put_byte_next */
0x0142b608,
0xbb3854ff,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x088c21f5,
0xf40464b6,
0x46b03411,
0xd81bf400,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xcd21f550,
0x0464b608,
0xbb0f11f4,
0x36b00076,
0x061bf401,
/* 0x09bf: i2c_put_byte_done */
0xf80132f4,
/* 0x09c1: i2c_addr */
0x0076bb00,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b608ba,
0x0f11f404,
0xb00076bb,
0x1bf40136,
0x0132f406,
/* 0x09ac: i2c_put_byte_done */
/* 0x09ae: i2c_addr */
0x76bb00f8,
0x64b607fd,
0x2911f404,
0x012ec3e7,
0xfd0134b6,
0x76bb0553,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb607ea21,
0x11f40464,
0x2ec3e729,
0x0134b601,
0xbb0553fd,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x095321f5,
/* 0x09f3: i2c_addr_done */
0xf80464b6,
/* 0x09f5: i2c_acquire_addr */
0xf8cec700,
0xb702e4b6,
0x980c10e0,
0x00f800ee,
/* 0x0a04: i2c_acquire */
0x09f521f5,
0xf00421f4,
0x21f403d9,
/* 0x0a13: i2c_release */
0xf500f83f,
0xf409f521,
0xdaf00421,
0xb6096621,
/* 0x0a06: i2c_addr_done */
0x00f80464,
/* 0x0a08: i2c_acquire_addr */
0xb6f8cec7,
0xe0b702e4,
0xee980d1c,
/* 0x0a17: i2c_acquire */
0xf500f800,
0xf40a0821,
0xd9f00421,
0x3f21f403,
/* 0x0a22: i2c_recv */
0x32f400f8,
0xf8c1c701,
0xb00214b6,
0x1ff52816,
0x13a0013a,
0x32980be8,
0xc013a000,
0x0031980b,
0xf90231f4,
0xf9e0f9d0,
0x0067f1d0,
0x0063f100,
0x01679210,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x0421f550,
0x0464b60a,
0xd6b0d0fc,
0xb31bf500,
0x0057f000,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xae21f550,
0x0464b609,
0x00d011f5,
0xbbe0c5c7,
/* 0x0a26: i2c_release */
0x21f500f8,
0x21f40a08,
0x03daf004,
0xf83f21f4,
/* 0x0a35: i2c_recv */
0x0132f400,
0xb6f8c1c7,
0x16b00214,
0x3a1ff528,
0xf413a001,
0x0032980c,
0x0ccc13a0,
0xf4003198,
0xd0f90231,
0xd0f9e0f9,
0x000067f1,
0x100063f1,
0xbb016792,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x095321f5,
0x0a1721f5,
0xfc0464b6,
0x00d6b0d0,
0x00b31bf5,
0xbb0057f0,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x09c121f5,
0xf50464b6,
0xf000ad11,
0x76bb0157,
0xc700d011,
0x76bbe0c5,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb609ae21,
0xb6096621,
0x11f50464,
0x76bb008a,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb6090121,
0x11f40464,
0xe05bcb6a,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x4621f550,
0x0464b608,
0xbd025bb9,
0x430ef474,
/* 0x0b28: i2c_recv_not_rd08 */
0xf401d6b0,
0x57f03d1b,
0xae21f500,
0x3311f409,
0xf5e0c5c7,
0xf4095321,
0x57f02911,
0xae21f500,
0x1f11f409,
0xf5e0b5c7,
0xf4095321,
0x21f51511,
0x74bd0846,
0xf408c5c7,
0x32f4091b,
0x030ef402,
/* 0x0b68: i2c_recv_not_wr08 */
/* 0x0b68: i2c_recv_done */
0xf5f8cec7,
0xfc0a1321,
0xf4d0fce0,
0x7cb90a12,
0x4221f502,
/* 0x0b7d: i2c_recv_exit */
/* 0x0b7f: i2c_init */
0xf800f803,
/* 0x0b81: test_recv */
0xd817f100,
0x0614b605,
0xb60011cf,
0x07f10110,
0x04b605d8,
0x0001d006,
0xe7f104bd,
0xe3f1d900,
0x21f5134f,
0x00f80262,
/* 0x0ba8: test_init */
0x0800e7f1,
0x026221f5,
/* 0x0bb2: idle_recv */
0x57f000ad,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b609c1,
0x8a11f504,
0x0076bb00,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b60914,
0x6a11f404,
0xbbe05bcb,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x085921f5,
0xb90464b6,
0x74bd025b,
/* 0x0b3b: i2c_recv_not_rd08 */
0xb0430ef4,
0x1bf401d6,
0x0057f03d,
0x09c121f5,
0xc73311f4,
0x21f5e0c5,
0x11f40966,
0x0057f029,
0x09c121f5,
0xc71f11f4,
0x21f5e0b5,
0x11f40966,
0x5921f515,
0xc774bd08,
0x1bf408c5,
0x0232f409,
/* 0x0b7b: i2c_recv_not_wr08 */
/* 0x0b7b: i2c_recv_done */
0xc7030ef4,
0x21f5f8ce,
0xe0fc0a26,
0x12f4d0fc,
0x027cb90a,
0x034221f5,
/* 0x0b90: i2c_recv_exit */
/* 0x0b92: i2c_init */
0x00f800f8,
/* 0x0bb4: idle */
0xf10031f4,
0xb605d417,
0x11cf0614,
0x0110b600,
0x05d407f1,
0xd00604b6,
0x04bd0001,
/* 0x0bd0: idle_loop */
0xf45817f0,
/* 0x0bd6: idle_proc */
/* 0x0bd6: idle_proc_exec */
0x10f90232,
0xf5021eb9,
0xfc034b21,
0x0911f410,
0xf40231f4,
/* 0x0bea: idle_proc_next */
0x10b6ef0e,
0x061fb858,
0xf4e61bf4,
0x28f4dd02,
0xbb0ef400,
/* 0x0b94: test_recv */
0x05d817f1,
0xcf0614b6,
0x10b60011,
0xd807f101,
0x0604b605,
0xbd0001d0,
0x00e7f104,
0x4fe3f1d9,
0x6221f513,
/* 0x0bbb: test_init */
0xf100f802,
0xf50800e7,
0xf8026221,
/* 0x0bc5: idle_recv */
/* 0x0bc7: idle */
0xf400f800,
0x17f10031,
0x14b605d4,
0x0011cf06,
0xf10110b6,
0xb605d407,
0x01d00604,
/* 0x0be3: idle_loop */
0xf004bd00,
0x32f45817,
/* 0x0be9: idle_proc */
/* 0x0be9: idle_proc_exec */
0xb910f902,
0x21f5021e,
0x10fc034b,
0xf40911f4,
0x0ef40231,
/* 0x0bfd: idle_proc_next */
0x5810b6ef,
0xf4061fb8,
0x02f4e61b,
0x0028f4dd,
0x00bb0ef4,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
};

View File

@ -46,8 +46,8 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x584d454d,
0x00000678,
0x0000066a,
0x0000068b,
0x0000067d,
0x00000000,
0x00000000,
0x00000000,
@ -68,8 +68,8 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x46524550,
0x0000067c,
0x0000067a,
0x0000068f,
0x0000068d,
0x00000000,
0x00000000,
0x00000000,
@ -90,8 +90,8 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x5f433249,
0x00000a97,
0x0000093a,
0x00000aaa,
0x0000094d,
0x00000000,
0x00000000,
0x00000000,
@ -112,8 +112,8 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x54534554,
0x00000aba,
0x00000a99,
0x00000acd,
0x00000aac,
0x00000000,
0x00000000,
0x00000000,
@ -134,8 +134,8 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x454c4449,
0x00000ac6,
0x00000ac4,
0x00000ad9,
0x00000ad7,
0x00000000,
0x00000000,
0x00000000,
@ -246,13 +246,15 @@ uint32_t nvd0_pwr_data[] = {
0x00010006,
0x00000000,
0x000005d3,
/* 0x03b8: memx_func_tail */
/* 0x03b8: memx_ts_start */
0x00000007,
0x00000000,
/* 0x03bc: memx_ts_end */
0x00000619,
/* 0x03c4: memx_func_tail */
/* 0x03c4: memx_ts_start */
0x00000000,
/* 0x03c0: memx_data_head */
/* 0x03c8: memx_ts_end */
0x00000000,
/* 0x03cc: memx_data_head */
0x00000000,
0x00000000,
0x00000000,
@ -764,8 +766,75 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x00000000,
/* 0x0bc0: memx_data_tail */
/* 0x0bc0: i2c_scl_map */
0x00000000,
/* 0x0bcc: memx_data_tail */
/* 0x0bcc: memx_train_head */
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
/* 0x0ccc: i2c_scl_map */
0x00000400,
0x00000800,
0x00001000,
@ -776,7 +845,7 @@ uint32_t nvd0_pwr_data[] = {
0x00020000,
0x00040000,
0x00080000,
/* 0x0be8: i2c_sda_map */
/* 0x0cf4: i2c_sda_map */
0x00100000,
0x00200000,
0x00400000,
@ -844,9 +913,6 @@ uint32_t nvd0_pwr_data[] = {
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
};
uint32_t nvd0_pwr_code[] = {
@ -1236,11 +1302,11 @@ uint32_t nvd0_pwr_code[] = {
0x0bf40464,
0x2c67f0f6,
0x800066cf,
0x00f8ee06,
0x00f8f106,
/* 0x0554: memx_func_leave */
0xcf2c67f0,
0x06800066,
0x0467f0ef,
0x0467f0f2,
0x07e407f1,
0xbd0006d0,
/* 0x0569: memx_func_leave_wait */
@ -1292,379 +1358,383 @@ uint32_t nvd0_pwr_code[] = {
0x1e9800f8,
0x0410b600,
0xf86721f4,
/* 0x0619: memx_exec */
0xf9e0f900,
0x02c1b9d0,
/* 0x0623: memx_exec_next */
0x9802b2b9,
0x10b60013,
0xf034e704,
0xe033e701,
0x0132b601,
0x980c30f0,
0x55f9de35,
0xf40612b8,
0x0b98e41e,
0xef0c98ee,
0xf102cbbb,
0xcf07c4b7,
0xd0fc00bb,
0x21f5e0fc,
0x00f802f1,
/* 0x065c: memx_info */
0x03c0c7f1,
0x0800b7f1,
/* 0x0619: memx_func_train */
/* 0x061b: memx_exec */
0xf900f800,
0xb9d0f9e0,
0xb2b902c1,
/* 0x0625: memx_exec_next */
0x00139802,
0xe70410b6,
0xe701f034,
0xb601e033,
0x30f00132,
0xde35980c,
0x12b855f9,
0xe41ef406,
0x98f10b98,
0xcbbbf20c,
0xc4b7f102,
0x00bbcf07,
0xe0fcd0fc,
0x02f121f5,
/* 0x066a: memx_recv */
0xd6b000f8,
0xac0bf401,
0xf400d6b0,
0x00f8e90b,
/* 0x0678: memx_init */
/* 0x067a: perf_recv */
0x00f800f8,
/* 0x067c: perf_init */
/* 0x067e: i2c_drive_scl */
0x36b000f8,
0x0e0bf400,
0x07e007f1,
0xbd0001d0,
/* 0x068f: i2c_drive_scl_lo */
0xf100f804,
0xd007e407,
/* 0x065e: memx_info */
0xc67000f8,
0x0e0bf401,
/* 0x0664: memx_info_data */
0x03ccc7f1,
0x0800b7f1,
/* 0x066f: memx_info_train */
0xf10b0ef4,
0xf10bccc7,
/* 0x0677: memx_info_send */
0xf50100b7,
0xf802f121,
/* 0x067d: memx_recv */
0x01d6b000,
0xb09b0bf4,
0x0bf400d6,
/* 0x068b: memx_init */
0xf800f8d8,
/* 0x068d: perf_recv */
/* 0x068f: perf_init */
0xf800f800,
/* 0x0691: i2c_drive_scl */
0x0036b000,
0xf10e0bf4,
0xd007e007,
0x04bd0001,
/* 0x069a: i2c_drive_sda */
0x36b000f8,
0x0e0bf400,
0x07e007f1,
0xbd0002d0,
/* 0x06ab: i2c_drive_sda_lo */
0xf100f804,
0xd007e407,
/* 0x06a2: i2c_drive_scl_lo */
0x07f100f8,
0x01d007e4,
0xf804bd00,
/* 0x06ad: i2c_drive_sda */
0x0036b000,
0xf10e0bf4,
0xd007e007,
0x04bd0002,
/* 0x06b6: i2c_sense_scl */
/* 0x06be: i2c_drive_sda_lo */
0x07f100f8,
0x02d007e4,
0xf804bd00,
/* 0x06c9: i2c_sense_scl */
0x0132f400,
0x07c437f1,
0xfd0033cf,
0x0bf40431,
0x0131f406,
/* 0x06dc: i2c_sense_scl_done */
/* 0x06de: i2c_sense_sda */
0x32f400f8,
0xc437f101,
0x0033cf07,
0xf40431fd,
0xf40432fd,
0x31f4060b,
/* 0x06c9: i2c_sense_scl_done */
/* 0x06cb: i2c_sense_sda */
0xf400f801,
0x37f10132,
0x33cf07c4,
0x0432fd00,
0xf4060bf4,
/* 0x06de: i2c_sense_sda_done */
0x00f80131,
/* 0x06e0: i2c_raise_scl */
0x47f140f9,
0x37f00898,
0x7e21f501,
/* 0x06ed: i2c_raise_scl_wait */
0xe8e7f106,
0x6721f403,
0x06b621f5,
0xb60901f4,
0x1bf40142,
/* 0x0701: i2c_raise_scl_done */
0xf840fcef,
/* 0x0705: i2c_start */
0xb621f500,
0x0d11f406,
0x06cb21f5,
0xf40611f4,
/* 0x0716: i2c_start_rep */
0x37f0300e,
0x7e21f500,
0x0137f006,
0x069a21f5,
/* 0x06f1: i2c_sense_sda_done */
/* 0x06f3: i2c_raise_scl */
0xf900f801,
0x9847f140,
0x0137f008,
0x069121f5,
/* 0x0700: i2c_raise_scl_wait */
0x03e8e7f1,
0xf56721f4,
0xf406c921,
0x42b60901,
0xef1bf401,
/* 0x0714: i2c_raise_scl_done */
0x00f840fc,
/* 0x0718: i2c_start */
0x06c921f5,
0xf50d11f4,
0xf406de21,
0x0ef40611,
/* 0x0729: i2c_start_rep */
0x0037f030,
0x069121f5,
0xf50137f0,
0xbb06ad21,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x06f321f5,
0xf40464b6,
/* 0x0756: i2c_start_send */
0x37f01f11,
0xad21f500,
0x88e7f106,
0x6721f413,
0xf50037f0,
0xf1069121,
0xf41388e7,
/* 0x0772: i2c_start_out */
0x00f86721,
/* 0x0774: i2c_stop */
0xf50037f0,
0xf0069121,
0x21f50037,
0xe7f106ad,
0x21f403e8,
0x0137f067,
0x069121f5,
0x1388e7f1,
0xf06721f4,
0x21f50137,
0xe7f106ad,
0x21f41388,
/* 0x07a7: i2c_bitw */
0xf500f867,
0xf106ad21,
0xf403e8e7,
0x76bb6721,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb606f321,
0x11f40464,
0x88e7f118,
0x6721f413,
0xf50037f0,
0xf1069121,
0xf41388e7,
/* 0x07e6: i2c_bitw_out */
0x00f86721,
/* 0x07e8: i2c_bitr */
0xf50137f0,
0xf106ad21,
0xf403e8e7,
0x76bb6721,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb606f321,
0x11f40464,
0xde21f51b,
0x0037f006,
0x069121f5,
0x1388e7f1,
0xf06721f4,
0x31f4013c,
/* 0x082d: i2c_bitr_done */
/* 0x082f: i2c_get_byte */
0xf000f801,
0x47f00057,
/* 0x0835: i2c_get_byte_next */
0x0154b608,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xe021f550,
0x0464b606,
/* 0x0743: i2c_start_send */
0xf01f11f4,
0x21f50037,
0xe7f1069a,
0x21f41388,
0x0037f067,
0x067e21f5,
0x1388e7f1,
/* 0x075f: i2c_start_out */
0xf86721f4,
/* 0x0761: i2c_stop */
0x0037f000,
0x067e21f5,
0xf50037f0,
0xf1069a21,
0xf403e8e7,
0x37f06721,
0x7e21f501,
0x88e7f106,
0x6721f413,
0xf50137f0,
0xf1069a21,
0xf41388e7,
0x00f86721,
/* 0x0794: i2c_bitw */
0x069a21f5,
0x03e8e7f1,
0xbb6721f4,
0xe821f550,
0x0464b607,
0xfd2b11f4,
0x42b60553,
0xd81bf401,
0xbb0137f0,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x06e021f5,
0xf40464b6,
0xe7f11811,
0x21f41388,
0x0037f067,
0x067e21f5,
0x1388e7f1,
/* 0x07d3: i2c_bitw_out */
0xf86721f4,
/* 0x07d5: i2c_bitr */
0x0137f000,
0x069a21f5,
0x03e8e7f1,
0xbb6721f4,
0x07a721f5,
/* 0x087f: i2c_get_byte_done */
0xf80464b6,
/* 0x0881: i2c_put_byte */
0x0847f000,
/* 0x0884: i2c_put_byte_next */
0xff0142b6,
0x76bb3854,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb607a721,
0x11f40464,
0x0046b034,
0xbbd81bf4,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x06e021f5,
0x07e821f5,
0xf40464b6,
0x21f51b11,
0x37f006cb,
0x7e21f500,
0x88e7f106,
0x6721f413,
0xf4013cf0,
/* 0x081a: i2c_bitr_done */
0x00f80131,
/* 0x081c: i2c_get_byte */
0xf00057f0,
/* 0x0822: i2c_get_byte_next */
0x54b60847,
0x76bb0f11,
0x0136b000,
0xf4061bf4,
/* 0x08da: i2c_put_byte_done */
0x00f80132,
/* 0x08dc: i2c_addr */
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x1821f550,
0x0464b607,
0xe72911f4,
0xb6012ec3,
0x53fd0134,
0x0076bb05,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b60881,
/* 0x0921: i2c_addr_done */
/* 0x0923: i2c_acquire_addr */
0xc700f804,
0xe4b6f8ce,
0x14e0b705,
/* 0x092f: i2c_acquire */
0xf500f8d0,
0xf4092321,
0xd9f00421,
0x3321f403,
/* 0x093e: i2c_release */
0x21f500f8,
0x21f40923,
0x03daf004,
0xf83321f4,
/* 0x094d: i2c_recv */
0x0132f400,
0xb6f8c1c7,
0x16b00214,
0x3a1ff528,
0xf413a001,
0x0032980c,
0x0ccc13a0,
0xf4003198,
0xd0f90231,
0xd0f9e0f9,
0x000067f1,
0x100063f1,
0xbb016792,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x092f21f5,
0xfc0464b6,
0x00d6b0d0,
0x00b31bf5,
0xbb0057f0,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x08dc21f5,
0xf50464b6,
0xc700d011,
0x76bbe0c5,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb6088121,
0x11f50464,
0x57f000ad,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b607d5,
0x2b11f404,
0xb60553fd,
0x1bf40142,
0x0137f0d8,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x9421f550,
0x0464b607,
/* 0x086c: i2c_get_byte_done */
/* 0x086e: i2c_put_byte */
0x47f000f8,
/* 0x0871: i2c_put_byte_next */
0x0142b608,
0xbb3854ff,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x079421f5,
0xf40464b6,
0x46b03411,
0xd81bf400,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xd521f550,
0x0464b607,
0xbb0f11f4,
0x36b00076,
0x061bf401,
/* 0x08c7: i2c_put_byte_done */
0xf80132f4,
/* 0x08c9: i2c_addr */
0x64b608dc,
0x8a11f504,
0x0076bb00,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
0x64b60705,
0x2911f404,
0x012ec3e7,
0xfd0134b6,
0x76bb0553,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb6086e21,
/* 0x090e: i2c_addr_done */
0x00f80464,
/* 0x0910: i2c_acquire_addr */
0xb6f8cec7,
0xe0b705e4,
0x00f8d014,
/* 0x091c: i2c_acquire */
0x091021f5,
0xf00421f4,
0x21f403d9,
/* 0x092b: i2c_release */
0xf500f833,
0xf4091021,
0xdaf00421,
0x3321f403,
/* 0x093a: i2c_recv */
0x32f400f8,
0xf8c1c701,
0xb00214b6,
0x1ff52816,
0x13a0013a,
0x32980be8,
0xc013a000,
0x0031980b,
0xf90231f4,
0xf9e0f9d0,
0x0067f1d0,
0x0063f100,
0x01679210,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x1c21f550,
0x0464b609,
0xd6b0d0fc,
0xb31bf500,
0x0057f000,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0xc921f550,
0x0464b608,
0x00d011f5,
0xbbe0c5c7,
0x64b6082f,
0x6a11f404,
0xbbe05bcb,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
0x086e21f5,
0xf50464b6,
0xf000ad11,
0x76bb0157,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb608c921,
0x11f50464,
0x76bb008a,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
0xb6081c21,
0x11f40464,
0xe05bcb6a,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x6121f550,
0x0464b607,
0xbd025bb9,
0x430ef474,
/* 0x0a40: i2c_recv_not_rd08 */
0xf401d6b0,
0x57f03d1b,
0xc921f500,
0x3311f408,
0xf5e0c5c7,
0xf4086e21,
0x57f02911,
0xc921f500,
0x1f11f408,
0xf5e0b5c7,
0xf4086e21,
0x21f51511,
0x74bd0761,
0xf408c5c7,
0x32f4091b,
0x030ef402,
/* 0x0a80: i2c_recv_not_wr08 */
/* 0x0a80: i2c_recv_done */
0xf5f8cec7,
0xfc092b21,
0xf4d0fce0,
0x7cb90a12,
0xf121f502,
/* 0x0a95: i2c_recv_exit */
/* 0x0a97: i2c_init */
0x077421f5,
0xb90464b6,
0x74bd025b,
/* 0x0a53: i2c_recv_not_rd08 */
0xb0430ef4,
0x1bf401d6,
0x0057f03d,
0x08dc21f5,
0xc73311f4,
0x21f5e0c5,
0x11f40881,
0x0057f029,
0x08dc21f5,
0xc71f11f4,
0x21f5e0b5,
0x11f40881,
0x7421f515,
0xc774bd07,
0x1bf408c5,
0x0232f409,
/* 0x0a93: i2c_recv_not_wr08 */
/* 0x0a93: i2c_recv_done */
0xc7030ef4,
0x21f5f8ce,
0xe0fc093e,
0x12f4d0fc,
0x027cb90a,
0x02f121f5,
/* 0x0aa8: i2c_recv_exit */
/* 0x0aaa: i2c_init */
0x00f800f8,
/* 0x0aac: test_recv */
0x05d817f1,
0xb60011cf,
0x07f10110,
0x01d005d8,
0xf104bd00,
0xf1d900e7,
0xf5134fe3,
0xf8022321,
/* 0x0acd: test_init */
0x00e7f100,
0x2321f508,
/* 0x0ad7: idle_recv */
0xf800f802,
/* 0x0a99: test_recv */
0xd817f100,
0x0011cf05,
0xf10110b6,
0xd005d807,
0x04bd0001,
0xd900e7f1,
0x134fe3f1,
0x022321f5,
/* 0x0aba: test_init */
0xe7f100f8,
0x21f50800,
0x00f80223,
/* 0x0ac4: idle_recv */
/* 0x0ac6: idle */
0x31f400f8,
0xd417f100,
0x0011cf05,
0xf10110b6,
0xd005d407,
0x04bd0001,
/* 0x0adc: idle_loop */
0xf45817f0,
/* 0x0ae2: idle_proc */
/* 0x0ae2: idle_proc_exec */
0x10f90232,
0xf5021eb9,
0xfc02fa21,
0x0911f410,
0xf40231f4,
/* 0x0af6: idle_proc_next */
0x10b6ef0e,
0x061fb858,
0xf4e61bf4,
0x28f4dd02,
0xc10ef400,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
/* 0x0ad9: idle */
0x0031f400,
0x05d417f1,
0xb60011cf,
0x07f10110,
0x01d005d4,
/* 0x0aef: idle_loop */
0xf004bd00,
0x32f45817,
/* 0x0af5: idle_proc */
/* 0x0af5: idle_proc_exec */
0xb910f902,
0x21f5021e,
0x10fc02fa,
0xf40911f4,
0x0ef40231,
/* 0x0b09: idle_proc_next */
0x5810b6ef,
0xf4061fb8,
0x02f4e61b,
0x0028f4dd,
0x00c10ef4,
0x00000000,
0x00000000,
0x00000000,

View File

@ -18,6 +18,10 @@
#define MEMX_MSG_INFO 0
#define MEMX_MSG_EXEC 1
/* MEMX: info types */
#define MEMX_INFO_DATA 0
#define MEMX_INFO_TRAIN 1
/* MEMX: script opcode definitions */
#define MEMX_ENTER 1
#define MEMX_LEAVE 2
@ -25,6 +29,7 @@
#define MEMX_WAIT 4
#define MEMX_DELAY 5
#define MEMX_VBLANK 6
#define MEMX_TRAIN 7
/* I2C_: message identifiers */
#define I2C__MSG_RD08 0

View File

@ -47,7 +47,8 @@ nouveau_memx_init(struct nouveau_pwr *ppwr, struct nouveau_memx **pmemx)
u32 reply[2];
int ret;
ret = ppwr->message(ppwr, reply, PROC_MEMX, MEMX_MSG_INFO, 0, 0);
ret = ppwr->message(ppwr, reply, PROC_MEMX, MEMX_MSG_INFO,
MEMX_INFO_DATA, 0);
if (ret)
return ret;
@ -151,6 +152,38 @@ nouveau_memx_wait_vblank(struct nouveau_memx *memx)
memx_out(memx); /* fuc can't handle multiple */
}
void
nouveau_memx_train(struct nouveau_memx *memx)
{
nv_debug(memx->ppwr, " MEM TRAIN\n");
memx_cmd(memx, MEMX_TRAIN, 0, NULL);
}
int
nouveau_memx_train_result(struct nouveau_pwr *ppwr, u32 *res, int rsize)
{
u32 reply[2], base, size, i;
int ret;
ret = ppwr->message(ppwr, reply, PROC_MEMX, MEMX_MSG_INFO,
MEMX_INFO_TRAIN, 0);
if (ret)
return ret;
base = reply[0];
size = reply[1] >> 2;
if (size > rsize)
return -ENOMEM;
/* read the packet */
nv_wr32(ppwr, 0x10a1c0, 0x02000000 | base);
for (i = 0; i < size; i++)
res[i] = nv_rd32(ppwr, 0x10a1c4);
return 0;
}
void
nouveau_memx_block(struct nouveau_memx *memx)
{