3d6816abcd
MT8195 also uses mt6359p so we can reuse most drivers. The only differences are IO configuaration, clock setting, and PMIC internal setting related to soc. Reference datasheet: MT6315 datasheet v1.4.2.pdf, RH-D-2019-0616. Reference datasheet: MT6359_PMIC_Data_Sheet_V1.5.docx, RH-D-2018-0205. Change-Id: I73f9c9bf92837f262c15758f16dacf52261dd3a3 Signed-off-by: Henry Chen <henryc.chen@mediatek.com> Signed-off-by: Yidi Lin <yidi.lin@mediatek.com> Signed-off-by: Rex-BC Chen <rex-bc.chen@mediatek.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/52668 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Yu-Ping Wu <yupingso@google.com>
205 lines
5 KiB
C
205 lines
5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#include <soc/mt6315.h>
|
|
|
|
static const struct mt6315_setting init_setting_cpu[] = {
|
|
/* disable magic key protection */
|
|
{0x3A9, 0x63, 0xFF, 0},
|
|
{0x3A8, 0x15, 0xFF, 0},
|
|
{0x3A0, 0x9C, 0xFF, 0},
|
|
{0x39F, 0xEA, 0xFF, 0},
|
|
{0x993, 0x47, 0xFF, 0},
|
|
{0x992, 0x29, 0xFF, 0},
|
|
{0x1418, 0x55, 0xFF, 0},
|
|
{0x1417, 0x43, 0xFF, 0},
|
|
{0x3A2, 0x2A, 0xFF, 0},
|
|
{0x3A1, 0x7C, 0xFF, 0},
|
|
/* clear boot status */
|
|
{0x12A, 0x3, 0xFF, 0},
|
|
{0xD, 1, 0x1, 0},
|
|
{0xD, 0, 0x1, 0},
|
|
{0x1416, 0xF, 0xF, 0},
|
|
/* init setting */
|
|
{0x997, 0xF, 0x7F, 0},
|
|
{0x999, 0xF0, 0xF0, 0},
|
|
{0x9A0, 0x0, 0x1F, 0},
|
|
{0x9A1, 0x0, 0x1F, 0},
|
|
{0x9A2, 0x0, 0x1F, 0},
|
|
{0x9A3, 0x0, 0x1F, 0},
|
|
{0x1440, 0x0, 0xE, 0},
|
|
{0x1487, 0x58, 0xFF, 0},
|
|
{0x148B, 0x3, 0x7F, 0},
|
|
{0x148C, 0x3, 0x7F, 0},
|
|
{0x1507, 0x58, 0xFF, 0},
|
|
{0x150B, 0x3, 0x7F, 0},
|
|
{0x150C, 0x3, 0x7F, 0},
|
|
{0x1587, 0x58, 0xFF, 0},
|
|
{0x158B, 0x3, 0x7F, 0},
|
|
{0x158C, 0x3, 0x7F, 0},
|
|
{0x1607, 0x58, 0xFF, 0},
|
|
{0x160B, 0x3, 0x7F, 0},
|
|
{0x160C, 0x3, 0x7F, 0},
|
|
{0x1687, 0x22, 0x76, 0},
|
|
{0x1688, 0xF, 0x2F, 0},
|
|
{0x1689, 0xA1, 0xE1, 0},
|
|
{0x168A, 0x79, 0x7F, 0},
|
|
{0x168B, 0x12, 0x3F, 0},
|
|
{0x168D, 0xC, 0xC, 0},
|
|
{0x168E, 0xD7, 0xFF, 0},
|
|
{0x168F, 0x81, 0xFF, 0},
|
|
{0x1690, 0x3, 0x3F, 0},
|
|
{0x1691, 0x22, 0x76, 0},
|
|
{0x1692, 0xF, 0x2F, 0},
|
|
{0x1693, 0xA1, 0xE1, 0},
|
|
{0x1694, 0x79, 0x7F, 0},
|
|
{0x1695, 0x12, 0x3F, 0},
|
|
{0x1697, 0xC, 0xC, 0},
|
|
{0x1698, 0xD7, 0xFF, 0},
|
|
{0x1699, 0x81, 0xFF, 0},
|
|
{0x169A, 0x3, 0x3F, 0},
|
|
{0x169B, 0x22, 0x76, 0},
|
|
{0x169C, 0xF, 0x2F, 0},
|
|
{0x169D, 0xA1, 0xE1, 0},
|
|
{0x169E, 0x79, 0xFF, 0},
|
|
{0x169F, 0x12, 0x3F, 0},
|
|
{0x16A1, 0xC, 0xC, 0},
|
|
{0x16A2, 0xD7, 0xFF, 0},
|
|
{0x16A3, 0x81, 0xFF, 0},
|
|
{0x16A4, 0x3, 0x3F, 0},
|
|
{0x16A5, 0x22, 0x76, 0},
|
|
{0x16A6, 0xF, 0x2F, 0},
|
|
{0x16A7, 0xA1, 0xE1, 0},
|
|
{0x16A8, 0x79, 0xFF, 0},
|
|
{0x16A9, 0x12, 0x3F, 0},
|
|
{0x16AB, 0xC, 0xC, 0},
|
|
{0x16AC, 0xD7, 0xFF, 0},
|
|
{0x16AD, 0x81, 0xFF, 0},
|
|
{0x16AE, 0x3, 0x3F, 0},
|
|
{0x16CE, 0x0, 0x8, 0},
|
|
|
|
{0x13, 0x2, 0x2, 0},
|
|
{0x15, 0x1F, 0x1F, 0},
|
|
{0x22, 0x12, 0x12, 0},
|
|
{0x8A, 0x6, 0xF, 0},
|
|
{0x10B, 0x3, 0x3, 0},
|
|
{0x38B, 0x4, 0xFF, 0},
|
|
{0xA07, 0x0, 0x1, 0},
|
|
{0xA1A, 0x1F, 0x1F, 0},
|
|
{0x1457, 0x0, 0xFF, 0},
|
|
/* enable magic key protection */
|
|
{0x3A9, 0, 0xFF, 0},
|
|
{0x3A8, 0, 0xFF, 0},
|
|
{0x3A0, 0, 0xFF, 0},
|
|
{0x39F, 0, 0xFF, 0},
|
|
{0x993, 0, 0xFF, 0},
|
|
{0x992, 0, 0xFF, 0},
|
|
{0x1418, 0, 0xFF, 0},
|
|
{0x1417, 0, 0xFF, 0},
|
|
{0x3a2, 0, 0xFF, 0},
|
|
{0x3a1, 0, 0xFF, 0},
|
|
};
|
|
|
|
static const struct mt6315_setting init_setting_gpu[] = {
|
|
/* disable magic key protection */
|
|
{0x3A9, 0x63, 0xFF, 0},
|
|
{0x3A8, 0x15, 0xFF, 0},
|
|
{0x3A0, 0x9C, 0xFF, 0},
|
|
{0x39F, 0xEA, 0xFF, 0},
|
|
{0x993, 0x47, 0xFF, 0},
|
|
{0x992, 0x29, 0xFF, 0},
|
|
{0x1418, 0x55, 0xFF, 0},
|
|
{0x1417, 0x43, 0xFF, 0},
|
|
{0x3a2, 0x2A, 0xFF, 0},
|
|
{0x3a1, 0x7C, 0xFF, 0},
|
|
/* init setting */
|
|
{0x997, 0x7, 0x7F, 0},
|
|
{0x999, 0xF0, 0xF0, 0},
|
|
{0x9A0, 0x0, 0x1F, 0},
|
|
{0x9A1, 0x0, 0x1F, 0},
|
|
{0x9A2, 0x1F, 0x1F, 0},
|
|
{0x9A3, 0x1F, 0x1F, 0},
|
|
{0x1440, 0xC, 0xE, 0},
|
|
{0x1487, 0x58, 0xFF, 0},
|
|
{0x148B, 0x1, 0x7F, 0},
|
|
{0x148C, 0x4, 0x7F, 0},
|
|
{0x1507, 0x58, 0xFF, 0},
|
|
{0x150B, 0x1, 0x7F, 0},
|
|
{0x150C, 0x4, 0x7F, 0},
|
|
{0x1587, 0x58, 0xFF, 0},
|
|
{0x158B, 0x1, 0x7F, 0},
|
|
{0x158C, 0x4, 0x7F, 0},
|
|
{0x1607, 0x78, 0xFF, 0},
|
|
{0x160B, 0x1, 0x7F, 0},
|
|
{0x160C, 0x4, 0x7F, 0},
|
|
{0x1687, 0x22, 0x76, 0},
|
|
{0x1688, 0xE, 0x2F, 0},
|
|
{0x1689, 0xA1, 0xE1, 0},
|
|
{0x168A, 0x79, 0x7F, 0},
|
|
{0x168B, 0x12, 0x3F, 0},
|
|
{0x168D, 0x0, 0xC, 0},
|
|
{0x168E, 0xD7, 0xFF, 0},
|
|
{0x168F, 0x81, 0xFF, 0},
|
|
{0x1690, 0x13, 0x3F, 0},
|
|
{0x1691, 0x22, 0x76, 0},
|
|
{0x1692, 0xE, 0x2F, 0},
|
|
{0x1693, 0xA1, 0xE1, 0},
|
|
{0x1694, 0x79, 0x7F, 0},
|
|
{0x1695, 0x12, 0x3F, 0},
|
|
{0x1697, 0x0, 0xC, 0},
|
|
{0x1698, 0xD7, 0xFF, 0},
|
|
{0x1699, 0x81, 0xFF, 0},
|
|
{0x169A, 0x13, 0x3F, 0},
|
|
{0x169B, 0x20, 0x76, 0},
|
|
{0x169C, 0xE, 0x2F, 0},
|
|
{0x169D, 0x80, 0xE1, 0},
|
|
{0x169E, 0xFC, 0xFF, 0},
|
|
{0x169F, 0x12, 0x3F, 0},
|
|
{0x16A1, 0x0, 0xC, 0},
|
|
{0x16A2, 0xDB, 0xFF, 0},
|
|
{0x16A3, 0xA1, 0xFF, 0},
|
|
{0x16A4, 0x1, 0x3F, 0},
|
|
{0x16A5, 0x20, 0x76, 0},
|
|
{0x16A6, 0xD, 0x2F, 0},
|
|
{0x16A7, 0x81, 0xE1, 0},
|
|
{0x16A8, 0xFC, 0xFF, 0},
|
|
{0x16A9, 0x12, 0x3F, 0},
|
|
{0x16AB, 0x0, 0xC, 0},
|
|
{0x16AC, 0xDB, 0xFF, 0},
|
|
{0x16AD, 0xA1, 0xFF, 0},
|
|
{0x16AE, 0x3, 0x3F, 0},
|
|
{0x16CE, 0x8, 0x8, 0},
|
|
|
|
{0x13, 0x2, 0x2, 0},
|
|
{0x15, 0x1F, 0x1F, 0},
|
|
{0x22, 0x12, 0x12, 0},
|
|
{0x8A, 0x6, 0xF, 0},
|
|
{0x10B, 0x3, 0x3, 0},
|
|
{0x38B, 0x4, 0xFF, 0},
|
|
{0xA07, 0x0, 0x1, 0},
|
|
{0xA1A, 0x1F, 0x1F, 0},
|
|
{0x1457, 0x0, 0xFF, 0},
|
|
/* enable magic key protection */
|
|
{0x3A9, 0, 0xFF, 0},
|
|
{0x3A8, 0, 0xFF, 0},
|
|
{0x3A0, 0, 0xFF, 0},
|
|
{0x39F, 0, 0xFF, 0},
|
|
{0x993, 0, 0xFF, 0},
|
|
{0x992, 0, 0xFF, 0},
|
|
{0x1418, 0, 0xFF, 0},
|
|
{0x1417, 0, 0xFF, 0},
|
|
{0x3a2, 0, 0xFF, 0},
|
|
{0x3a1, 0, 0xFF, 0},
|
|
};
|
|
|
|
void mt6315_init_setting(void)
|
|
{
|
|
for (int i = 0; i < ARRAY_SIZE(init_setting_cpu); i++)
|
|
mt6315_write_field(MT6315_CPU,
|
|
init_setting_cpu[i].addr, init_setting_cpu[i].val,
|
|
init_setting_cpu[i].mask, init_setting_cpu[i].shift);
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(init_setting_gpu); i++)
|
|
mt6315_write_field(MT6315_GPU,
|
|
init_setting_gpu[i].addr, init_setting_gpu[i].val,
|
|
init_setting_gpu[i].mask, init_setting_gpu[i].shift);
|
|
}
|