
Use content of EEPROM to detect the actual RAM size and adjust DDR timings, size and banks accordingly. Also enable the SoM detection per default in the defconfigs. Signed-off-by: Wadim Egorov <w.egorov@phytec.de> Tested-by: John Ma <jma@phytec.com>
207 lines
4.4 KiB
C
207 lines
4.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2024 PHYTEC Messtechnik GmbH
|
|
* Author: Wadim Egorov <w.egorov@phytec.de>
|
|
*/
|
|
|
|
#ifndef PHYCORE_DDR_DATA
|
|
#define PHYCORE_DDR_DATA
|
|
|
|
#include "../common/k3/k3_ddrss_patch.h"
|
|
|
|
/* 1 GB variant delta */
|
|
struct ddr_reg ddr_1gb_ctl_regs[] = {
|
|
{ 55, 0x0400DB60 },
|
|
{ 58, 0x0400DB60 },
|
|
{ 61, 0x0400DB60 },
|
|
{ 73, 0x00001860 },
|
|
{ 75, 0x00001860 },
|
|
{ 77, 0x00001860 },
|
|
{ 119, 0x00061800 },
|
|
{ 120, 0x00061800 },
|
|
{ 121, 0x00061800 },
|
|
{ 122, 0x00061800 },
|
|
{ 123, 0x00061800 },
|
|
{ 125, 0x0000AAA0 },
|
|
{ 126, 0x00061800 },
|
|
{ 127, 0x00061800 },
|
|
{ 128, 0x00061800 },
|
|
{ 129, 0x00061800 },
|
|
{ 130, 0x00061800 },
|
|
{ 132, 0x0000AAA0 },
|
|
{ 133, 0x00061800 },
|
|
{ 134, 0x00061800 },
|
|
{ 135, 0x00061800 },
|
|
{ 136, 0x00061800 },
|
|
{ 137, 0x00061800 },
|
|
{ 139, 0x0000AAA0 },
|
|
{ 206, 0x00000000 },
|
|
{ 209, 0x00000000 },
|
|
{ 212, 0x00000000 },
|
|
{ 215, 0x00000000 },
|
|
{ 218, 0x00000000 },
|
|
{ 221, 0x00000000 },
|
|
{ 230, 0x00000000 },
|
|
{ 231, 0x00000000 },
|
|
{ 232, 0x00000000 },
|
|
{ 233, 0x00000000 },
|
|
{ 234, 0x00000000 },
|
|
{ 235, 0x00000000 },
|
|
{ 316, 0x01010000 },
|
|
{ 318, 0x3FFF0000 },
|
|
{ 327, 0x00000C01 },
|
|
{ 328, 0x00000000 },
|
|
{ 385, 0x000030C0 },
|
|
{ 390, 0x0000DB60 },
|
|
{ 391, 0x0001E780 },
|
|
{ 394, 0x000030C0 },
|
|
{ 399, 0x0000DB60 },
|
|
{ 400, 0x0001E780 },
|
|
{ 403, 0x000030C0 },
|
|
{ 408, 0x0000DB60 },
|
|
{ 409, 0x0001E780 }
|
|
};
|
|
|
|
struct ddr_reg ddr_1gb_pi_regs[] = {
|
|
{ 77, 0x04000100 },
|
|
{ 176, 0x00001860 },
|
|
{ 178, 0x00001860 },
|
|
{ 180, 0x04001860 },
|
|
{ 233, 0x0000C570 },
|
|
{ 238, 0x0000C570 },
|
|
{ 243, 0x0000C570 },
|
|
{ 247, 0x000030C0 },
|
|
{ 248, 0x0001E780 },
|
|
{ 249, 0x000030C0 },
|
|
{ 250, 0x0001E780 },
|
|
{ 251, 0x000030C0 },
|
|
{ 252, 0x0001E780 },
|
|
{ 299, 0x00000000 },
|
|
{ 301, 0x00000000 },
|
|
{ 307, 0x00000000 },
|
|
{ 309, 0x00000000 },
|
|
{ 315, 0x00000000 },
|
|
{ 317, 0x00000000 },
|
|
{ 323, 0x00000000 },
|
|
{ 325, 0x00000000 },
|
|
{ 331, 0x00000000 },
|
|
{ 333, 0x00000000 },
|
|
{ 339, 0x00000000 },
|
|
{ 341, 0x00000000 }
|
|
};
|
|
|
|
struct ddr_reg ddr_1gb_phy_regs[] = {
|
|
{ 1371, 0x0001F7C2 },
|
|
};
|
|
|
|
/* 4 GB variant delta */
|
|
struct ddr_reg ddr_4gb_ctl_regs[] = {
|
|
{ 55, 0x0400DB60 },
|
|
{ 58, 0x0400DB60 },
|
|
{ 61, 0x0400DB60 },
|
|
{ 73, 0x00001860 },
|
|
{ 75, 0x00001860 },
|
|
{ 77, 0x00001860 },
|
|
{ 119, 0x00061800 },
|
|
{ 120, 0x00061800 },
|
|
{ 121, 0x00061800 },
|
|
{ 122, 0x00061800 },
|
|
{ 123, 0x00061800 },
|
|
{ 125, 0x0000AAA0 },
|
|
{ 126, 0x00061800 },
|
|
{ 127, 0x00061800 },
|
|
{ 128, 0x00061800 },
|
|
{ 129, 0x00061800 },
|
|
{ 130, 0x00061800 },
|
|
{ 132, 0x0000AAA0 },
|
|
{ 133, 0x00061800 },
|
|
{ 134, 0x00061800 },
|
|
{ 135, 0x00061800 },
|
|
{ 136, 0x00061800 },
|
|
{ 137, 0x00061800 },
|
|
{ 139, 0x0000AAA0 },
|
|
{ 206, 0x00000000 },
|
|
{ 209, 0x00000000 },
|
|
{ 212, 0x00000000 },
|
|
{ 215, 0x00000000 },
|
|
{ 218, 0x00000000 },
|
|
{ 221, 0x00000000 },
|
|
{ 230, 0x00000000 },
|
|
{ 231, 0x00000000 },
|
|
{ 232, 0x00000000 },
|
|
{ 233, 0x00000000 },
|
|
{ 234, 0x00000000 },
|
|
{ 235, 0x00000000 },
|
|
{ 316, 0x00000000 },
|
|
{ 318, 0x7FFF0000 },
|
|
{ 327, 0x01000C01 },
|
|
{ 328, 0x00000001 },
|
|
{ 385, 0x000030C0 },
|
|
{ 390, 0x0000DB60 },
|
|
{ 391, 0x0001E780 },
|
|
{ 394, 0x000030C0 },
|
|
{ 399, 0x0000DB60 },
|
|
{ 400, 0x0001E780 },
|
|
{ 403, 0x000030C0 },
|
|
{ 408, 0x0000DB60 },
|
|
{ 409, 0x0001E780 }
|
|
};
|
|
|
|
struct ddr_reg ddr_4gb_pi_regs[] = {
|
|
{ 77, 0x04000000 },
|
|
{ 176, 0x00001860 },
|
|
{ 178, 0x00001860 },
|
|
{ 180, 0x04001860 },
|
|
{ 233, 0x0000C570 },
|
|
{ 238, 0x0000C570 },
|
|
{ 243, 0x0000C570 },
|
|
{ 247, 0x000030C0 },
|
|
{ 248, 0x0001E780 },
|
|
{ 249, 0x000030C0 },
|
|
{ 250, 0x0001E780 },
|
|
{ 251, 0x000030C0 },
|
|
{ 252, 0x0001E780 },
|
|
{ 299, 0x00000000 },
|
|
{ 301, 0x00000000 },
|
|
{ 307, 0x00000000 },
|
|
{ 309, 0x00000000 },
|
|
{ 315, 0x00000000 },
|
|
{ 317, 0x00000000 },
|
|
{ 323, 0x00000000 },
|
|
{ 325, 0x00000000 },
|
|
{ 331, 0x00000000 },
|
|
{ 333, 0x00000000 },
|
|
{ 339, 0x00000000 },
|
|
{ 341, 0x00000000 }
|
|
};
|
|
|
|
struct ddr_reg ddr_4gb_phy_regs[] = {
|
|
{ 1371, 0x0001F7C2 },
|
|
};
|
|
|
|
enum {
|
|
PHYCORE_1GB,
|
|
PHYCORE_4GB,
|
|
};
|
|
|
|
struct ddrss phycore_ddrss_data[] = {
|
|
[PHYCORE_1GB] = {
|
|
.ctl_regs = &ddr_1gb_ctl_regs[0],
|
|
.ctl_regs_num = ARRAY_SIZE(ddr_1gb_ctl_regs),
|
|
.pi_regs = &ddr_1gb_pi_regs[0],
|
|
.pi_regs_num = ARRAY_SIZE(ddr_1gb_pi_regs),
|
|
.phy_regs = &ddr_1gb_phy_regs[0],
|
|
.phy_regs_num = ARRAY_SIZE(ddr_1gb_phy_regs),
|
|
},
|
|
[PHYCORE_4GB] = {
|
|
.ctl_regs = &ddr_4gb_ctl_regs[0],
|
|
.ctl_regs_num = ARRAY_SIZE(ddr_4gb_ctl_regs),
|
|
.pi_regs = &ddr_4gb_pi_regs[0],
|
|
.pi_regs_num = ARRAY_SIZE(ddr_4gb_pi_regs),
|
|
.phy_regs = &ddr_4gb_phy_regs[0],
|
|
.phy_regs_num = ARRAY_SIZE(ddr_4gb_phy_regs),
|
|
},
|
|
};
|
|
|
|
#endif /* PHYCORE_DDR_DATA */
|