1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2784548efSMasahiro Yamada /*
3784548efSMasahiro Yamada  * Copyright (C) 2016-2017 Socionext Inc.
4784548efSMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
5784548efSMasahiro Yamada  */
6784548efSMasahiro Yamada 
7784548efSMasahiro Yamada #include <common.h>
8784548efSMasahiro Yamada #include <spl.h>
9784548efSMasahiro Yamada #include <linux/io.h>
10784548efSMasahiro Yamada #include <linux/kernel.h>
11784548efSMasahiro Yamada 
12784548efSMasahiro Yamada #include "boot-device.h"
13784548efSMasahiro Yamada 
14784548efSMasahiro Yamada const struct uniphier_boot_device uniphier_ld11_boot_device_table[] = {
15784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC  8, EraseSize 128KB, Addr 4)"},
16784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 4)"},
17784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC  8, EraseSize 128KB, Addr 5)"},
18784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 5)"},
19784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC  8, EraseSize 256KB, Addr 5)"},
20784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 256KB, Addr 5)"},
21784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC  8, EraseSize 512KB, Addr 5)"},
22784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 512KB, Addr 5)"},
23784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC  8, EraseSize 128KB, Addr 4)"},
24784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 4)"},
25784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC  8, EraseSize 128KB, Addr 5)"},
26784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 5)"},
27784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC  8, EraseSize 256KB, Addr 5)"},
28784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 256KB, Addr 5)"},
29784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC  8, EraseSize 512KB, Addr 5)"},
30784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 512KB, Addr 5)"},
31784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC  8, ONFI,            Addr 4)"},
32784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI,            Addr 4)"},
33784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC  8, ONFI,            Addr 5)"},
34784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI,            Addr 5)"},
35784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC  8, ONFI             Addr 4)"},
36784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI             Addr 4)"},
37784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC  8, ONFI             Addr 5)"},
38784548efSMasahiro Yamada 	{BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI             Addr 5)"},
39784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (Legacy,         4bit, 1.8V, Training Off)"},
40784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (Legacy,         4bit, 1.8V, Training On)"},
41784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (Legacy,         8bit, 1.8V, Training Off)"},
42784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (Legacy,         8bit, 1.8V, Training On)"},
43784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (High Speed SDR, 8bit, 1.8V, Training Off)"},
44784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (High Speed SDR, 8bit, 1.8V, Training On)"},
45784548efSMasahiro Yamada 	{BOOT_DEVICE_MMC1, "eMMC (Legacy,         4bit, 1.8V, Training Off)"},
46784548efSMasahiro Yamada 	{BOOT_DEVICE_NOR,  "NOR  (XECS1)"},
47784548efSMasahiro Yamada };
48784548efSMasahiro Yamada 
49784548efSMasahiro Yamada const unsigned uniphier_ld11_boot_device_count =
50784548efSMasahiro Yamada 				ARRAY_SIZE(uniphier_ld11_boot_device_table);
51784548efSMasahiro Yamada 
uniphier_ld11_boot_device_is_usb(u32 pinmon)52784548efSMasahiro Yamada int uniphier_ld11_boot_device_is_usb(u32 pinmon)
53784548efSMasahiro Yamada {
54784548efSMasahiro Yamada 	return !!(~pinmon & 0x00000080);
55784548efSMasahiro Yamada }
56784548efSMasahiro Yamada 
uniphier_ld20_boot_device_is_usb(u32 pinmon)57784548efSMasahiro Yamada int uniphier_ld20_boot_device_is_usb(u32 pinmon)
58784548efSMasahiro Yamada {
59784548efSMasahiro Yamada 	return !!(~pinmon & 0x00000780);
60784548efSMasahiro Yamada }
61784548efSMasahiro Yamada 
uniphier_ld11_boot_device_fixup(unsigned int mode)62784548efSMasahiro Yamada unsigned int uniphier_ld11_boot_device_fixup(unsigned int mode)
63784548efSMasahiro Yamada {
64784548efSMasahiro Yamada 	if (mode == BOOT_DEVICE_MMC1 || mode == BOOT_DEVICE_USB)
65784548efSMasahiro Yamada 		mode = BOOT_DEVICE_BOARD;
66784548efSMasahiro Yamada 
67784548efSMasahiro Yamada 	return mode;
68784548efSMasahiro Yamada }
69