mirror of
https://github.com/smaeul/u-boot.git
synced 2025-11-27 06:14:41 +00:00
board: sl28: add SATA support
Enable SATA support. Although not supported by the usual SATA pins on the SMARC baseboard connector, SATA mode is supported on a PCIe lane. This way one can use a mSATA card in a Mini PCI slot. We need to invert the received data because in this mode the polarity of the SerDes lane is swapped. Provide a fixup in board_early_init_f() for the SPL. board_early_init_f() is then not common between SPL and u-boot proper anymore, thus common.c is removed, as it just contained said function. Signed-off-by: Michael Walle <michael@walle.cc> Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
parent
b463010be0
commit
805b2423b4
@ -172,6 +172,10 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&sata {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&serial0 {
|
&serial0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@ -4,7 +4,7 @@ ifndef CONFIG_SPL_BUILD
|
|||||||
obj-y += sl28.o cmds.o
|
obj-y += sl28.o cmds.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-y += common.o ddr.o
|
obj-y += ddr.o
|
||||||
|
|
||||||
ifdef CONFIG_SPL_BUILD
|
ifdef CONFIG_SPL_BUILD
|
||||||
obj-y += spl.o
|
obj-y += spl.o
|
||||||
|
|||||||
@ -1,10 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <asm/arch-fsl-layerscape/soc.h>
|
|
||||||
|
|
||||||
int board_early_init_f(void)
|
|
||||||
{
|
|
||||||
fsl_lsch3_early_init_f();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@ -19,6 +19,12 @@
|
|||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
fsl_lsch3_early_init_f();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int board_init(void)
|
int board_init(void)
|
||||||
{
|
{
|
||||||
if (CONFIG_IS_ENABLED(FSL_CAAM))
|
if (CONFIG_IS_ENABLED(FSL_CAAM))
|
||||||
|
|||||||
@ -3,10 +3,36 @@
|
|||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/spl.h>
|
#include <asm/spl.h>
|
||||||
|
#include <asm/arch-fsl-layerscape/fsl_serdes.h>
|
||||||
|
#include <asm/arch-fsl-layerscape/soc.h>
|
||||||
|
|
||||||
#define DCFG_RCWSR25 0x160
|
#define DCFG_RCWSR25 0x160
|
||||||
#define GPINFO_HW_VARIANT_MASK 0xff
|
#define GPINFO_HW_VARIANT_MASK 0xff
|
||||||
|
|
||||||
|
#define SERDES_LNDGCR0 0x1ea08c0
|
||||||
|
#define LNDGCR0_PROTS_MASK GENMASK(11, 7)
|
||||||
|
#define LNDGCR0_PROTS_SATA (0x2 << 7)
|
||||||
|
#define SERDES_LNDGCR1 0x1ea08c4
|
||||||
|
#define LNDGCR1_RDAT_INV BIT(31)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On this board the SMARC PCIe lane D might be switched to SATA mode. This
|
||||||
|
* makes sense if this lane is connected to a Mini PCI slot and a mSATA card
|
||||||
|
* is plugged in. In this case, the RX pair is swapped and we need to invert
|
||||||
|
* the received data.
|
||||||
|
*/
|
||||||
|
static void fixup_sata_rx_polarity(void)
|
||||||
|
{
|
||||||
|
u32 prot = in_le32(SERDES_LNDGCR0) & LNDGCR0_PROTS_MASK;
|
||||||
|
u32 tmp;
|
||||||
|
|
||||||
|
if (prot == LNDGCR0_PROTS_SATA) {
|
||||||
|
tmp = in_le32(SERDES_LNDGCR1);
|
||||||
|
tmp |= LNDGCR1_RDAT_INV;
|
||||||
|
out_le32(SERDES_LNDGCR1, tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int sl28_variant(void)
|
int sl28_variant(void)
|
||||||
{
|
{
|
||||||
return in_le32(DCFG_BASE + DCFG_RCWSR25) & GPINFO_HW_VARIANT_MASK;
|
return in_le32(DCFG_BASE + DCFG_RCWSR25) & GPINFO_HW_VARIANT_MASK;
|
||||||
@ -34,3 +60,11 @@ void board_boot_order(u32 *spl_boot_list)
|
|||||||
{
|
{
|
||||||
spl_boot_list[0] = BOOT_DEVICE_SPI;
|
spl_boot_list[0] = BOOT_DEVICE_SPI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
fixup_sata_rx_polarity();
|
||||||
|
fsl_lsch3_early_init_f();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
@ -62,6 +62,7 @@ CONFIG_DM=y
|
|||||||
CONFIG_SPL_DM=y
|
CONFIG_SPL_DM=y
|
||||||
CONFIG_SPL_DM_SEQ_ALIAS=y
|
CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||||
CONFIG_SCSI_AHCI=y
|
CONFIG_SCSI_AHCI=y
|
||||||
|
CONFIG_SATA_CEVA=y
|
||||||
CONFIG_FSL_CAAM=y
|
CONFIG_FSL_CAAM=y
|
||||||
CONFIG_SYS_FSL_DDR3=y
|
CONFIG_SYS_FSL_DDR3=y
|
||||||
CONFIG_DM_I2C=y
|
CONFIG_DM_I2C=y
|
||||||
|
|||||||
@ -93,6 +93,7 @@
|
|||||||
func(MMC, mmc, 1) \
|
func(MMC, mmc, 1) \
|
||||||
func(NVME, nvme, 0) \
|
func(NVME, nvme, 0) \
|
||||||
func(USB, usb, 0) \
|
func(USB, usb, 0) \
|
||||||
|
func(SCSI, scsi, 0) \
|
||||||
func(DHCP, dhcp, 0) \
|
func(DHCP, dhcp, 0) \
|
||||||
func(PXE, pxe, 0)
|
func(PXE, pxe, 0)
|
||||||
#include <config_distro_bootcmd.h>
|
#include <config_distro_bootcmd.h>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user