mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-28 07:03:31 +08:00
Merge tag 'ti-v2021.10-rc2' of https://source.denx.de/u-boot/custodians/u-boot-ti
- Add MMC High speed modes for AM64 and J7200 - Add Sierra/Torrent SERDES driver - Minor clean-ups for R5F boot from SPL
This commit is contained in:
commit
38436abd5e
@ -366,6 +366,7 @@ dtb-$(CONFIG_AM33XX) += \
|
||||
am335x-pocketbeagle.dtb \
|
||||
am335x-pxm50.dtb \
|
||||
am335x-rut.dtb \
|
||||
am335x-sancloud-bbe.dtb \
|
||||
am335x-shc.dtb \
|
||||
am335x-pdu001.dtb \
|
||||
am335x-chiliboard.dtb \
|
||||
|
@ -1,9 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
|
||||
/ {
|
||||
@ -13,44 +10,44 @@
|
||||
};
|
||||
};
|
||||
|
||||
memory@80000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x10000000>; /* 256 MB */
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart0;
|
||||
tick-timer = &timer2;
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x10000000>; /* 256 MB */
|
||||
};
|
||||
|
||||
leds {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&user_leds_s0>;
|
||||
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led@2 {
|
||||
led2 {
|
||||
label = "beaglebone:green:heartbeat";
|
||||
gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led@3 {
|
||||
led3 {
|
||||
label = "beaglebone:green:mmc0";
|
||||
gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "mmc0";
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led@4 {
|
||||
led4 {
|
||||
label = "beaglebone:green:usr2";
|
||||
gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "cpu0";
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led@5 {
|
||||
led5 {
|
||||
label = "beaglebone:green:usr3";
|
||||
gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "mmc1";
|
||||
@ -58,7 +55,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
vmmcsd_fixed: fixedregulator@0 {
|
||||
vmmcsd_fixed: fixedregulator0 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vmmcsd_fixed";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
@ -72,112 +69,118 @@
|
||||
|
||||
user_leds_s0: user_leds_s0 {
|
||||
pinctrl-single,pins = <
|
||||
0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */
|
||||
0x58 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a6.gpio1_22 */
|
||||
0x5c (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a7.gpio1_23 */
|
||||
0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a8.gpio1_24 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_A5, PIN_OUTPUT_PULLDOWN, MUX_MODE7) /* gpmc_a5.gpio1_21 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_A6, PIN_OUTPUT_PULLUP, MUX_MODE7) /* gpmc_a6.gpio1_22 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_A7, PIN_OUTPUT_PULLDOWN, MUX_MODE7) /* gpmc_a7.gpio1_23 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_A8, PIN_OUTPUT_PULLUP, MUX_MODE7) /* gpmc_a8.gpio1_24 */
|
||||
>;
|
||||
};
|
||||
|
||||
i2c0_pins: pinmux_i2c0_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */
|
||||
0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
|
||||
AM33XX_PADCONF(AM335X_PIN_I2C0_SDA, PIN_INPUT_PULLUP, MUX_MODE0) /* i2c0_sda.i2c0_sda */
|
||||
AM33XX_PADCONF(AM335X_PIN_I2C0_SCL, PIN_INPUT_PULLUP, MUX_MODE0) /* i2c0_scl.i2c0_scl */
|
||||
>;
|
||||
};
|
||||
|
||||
i2c2_pins: pinmux_i2c2_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x178 (PIN_INPUT_PULLUP | MUX_MODE3) /* uart1_ctsn.i2c2_sda */
|
||||
0x17c (PIN_INPUT_PULLUP | MUX_MODE3) /* uart1_rtsn.i2c2_scl */
|
||||
AM33XX_PADCONF(AM335X_PIN_UART1_CTSN, PIN_INPUT_PULLUP, MUX_MODE3) /* uart1_ctsn.i2c2_sda */
|
||||
AM33XX_PADCONF(AM335X_PIN_UART1_RTSN, PIN_INPUT_PULLUP, MUX_MODE3) /* uart1_rtsn.i2c2_scl */
|
||||
>;
|
||||
};
|
||||
|
||||
uart0_pins: pinmux_uart0_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
|
||||
0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
|
||||
AM33XX_PADCONF(AM335X_PIN_UART0_RXD, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_UART0_TXD, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
>;
|
||||
};
|
||||
|
||||
clkout2_pin: pinmux_clkout2_pin {
|
||||
pinctrl-single,pins = <
|
||||
0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
|
||||
AM33XX_PADCONF(AM335X_PIN_XDMA_EVENT_INTR1, PIN_OUTPUT_PULLDOWN, MUX_MODE3) /* xdma_event_intr1.clkout2 */
|
||||
>;
|
||||
};
|
||||
|
||||
cpsw_default: cpsw_default {
|
||||
pinctrl-single,pins = <
|
||||
/* Slave 1 */
|
||||
0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxerr.mii1_rxerr */
|
||||
0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txen.mii1_txen */
|
||||
0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxdv.mii1_rxdv */
|
||||
0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd3.mii1_txd3 */
|
||||
0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd2.mii1_txd2 */
|
||||
0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd1.mii1_txd1 */
|
||||
0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd0.mii1_txd0 */
|
||||
0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_txclk.mii1_txclk */
|
||||
0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxclk.mii1_rxclk */
|
||||
0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd3.mii1_rxd3 */
|
||||
0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd2.mii1_rxd2 */
|
||||
0x13c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd1.mii1_rxd1 */
|
||||
0x140 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd0.mii1_rxd0 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_ER, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_EN, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_DV, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD3, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD2, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD1, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD0, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_CLK, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_CLK, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD3, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD2, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD1, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD0, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
>;
|
||||
};
|
||||
|
||||
cpsw_sleep: cpsw_sleep {
|
||||
pinctrl-single,pins = <
|
||||
/* Slave 1 reset value */
|
||||
0x110 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x11c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x12c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x130 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x134 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x138 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_ER, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_EN, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_DV, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD3, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD2, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD1, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD0, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_CLK, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_CLK, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD3, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD2, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD1, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD0, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
>;
|
||||
};
|
||||
|
||||
davinci_mdio_default: davinci_mdio_default {
|
||||
pinctrl-single,pins = <
|
||||
/* MDIO */
|
||||
0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */
|
||||
0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */
|
||||
AM33XX_PADCONF(AM335X_PIN_MDIO, PIN_INPUT_PULLUP | SLEWCTRL_FAST, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MDC, PIN_OUTPUT_PULLUP, MUX_MODE0)
|
||||
>;
|
||||
};
|
||||
|
||||
davinci_mdio_sleep: davinci_mdio_sleep {
|
||||
pinctrl-single,pins = <
|
||||
/* MDIO reset value */
|
||||
0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MDIO, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MDC, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
>;
|
||||
};
|
||||
|
||||
mmc1_pins: pinmux_mmc1_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x160 (PIN_INPUT | MUX_MODE7) /* GPIO0_6 */
|
||||
AM33XX_PADCONF(AM335X_PIN_SPI0_CS1, PIN_INPUT, MUX_MODE7) /* spio0_cs1.gpio0_6 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MMC0_DAT0, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MMC0_DAT1, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MMC0_DAT2, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT_PULLUP, MUX_MODE0)
|
||||
>;
|
||||
};
|
||||
|
||||
emmc_pins: pinmux_emmc_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
|
||||
0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
|
||||
0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
|
||||
0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
|
||||
0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
|
||||
0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
|
||||
0x10 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
|
||||
0x14 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
|
||||
0x18 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
|
||||
0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_CSN1, PIN_INPUT_PULLUP, MUX_MODE2) /* gpmc_csn1.mmc1_clk */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_CSN2, PIN_INPUT_PULLUP, MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD0, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD1, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD2, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD3, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD4, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD5, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD6, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_AD7, PIN_INPUT_PULLUP, MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
|
||||
>;
|
||||
};
|
||||
};
|
||||
@ -189,36 +192,16 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_ctrl_mod {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb0_phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb1_phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
dr_mode = "peripheral";
|
||||
interrupts-extended = <&intc 18 &tps 0>;
|
||||
interrupt-names = "mc", "vbus";
|
||||
};
|
||||
|
||||
&usb1 {
|
||||
status = "okay";
|
||||
dr_mode = "host";
|
||||
};
|
||||
|
||||
&cppi41dma {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins>;
|
||||
@ -231,7 +214,7 @@
|
||||
};
|
||||
|
||||
baseboard_eeprom: baseboard_eeprom@50 {
|
||||
compatible = "at,24c256";
|
||||
compatible = "atmel,24c256";
|
||||
reg = <0x50>;
|
||||
|
||||
#address-cells = <1>;
|
||||
@ -250,7 +233,7 @@
|
||||
clock-frequency = <100000>;
|
||||
|
||||
cape_eeprom0: cape_eeprom0@54 {
|
||||
compatible = "at,24c256";
|
||||
compatible = "atmel,24c256";
|
||||
reg = <0x54>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@ -260,7 +243,7 @@
|
||||
};
|
||||
|
||||
cape_eeprom1: cape_eeprom1@55 {
|
||||
compatible = "at,24c256";
|
||||
compatible = "atmel,24c256";
|
||||
reg = <0x55>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@ -270,7 +253,7 @@
|
||||
};
|
||||
|
||||
cape_eeprom2: cape_eeprom2@56 {
|
||||
compatible = "at,24c256";
|
||||
compatible = "atmel,24c256";
|
||||
reg = <0x56>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@ -280,7 +263,7 @@
|
||||
};
|
||||
|
||||
cape_eeprom3: cape_eeprom3@57 {
|
||||
compatible = "at,24c256";
|
||||
compatible = "atmel,24c256";
|
||||
reg = <0x57>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@ -311,8 +294,20 @@
|
||||
* by the hardware problems. (Tip: double-check by performing a current
|
||||
* measurement after shutdown: it should be less than 1 mA.)
|
||||
*/
|
||||
|
||||
interrupts = <7>; /* NMI */
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
ti,pmic-shutdown-controller;
|
||||
|
||||
charger {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
pwrbutton {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
regulators {
|
||||
dcdc1_reg: regulator@0 {
|
||||
regulator-name = "vdds_dpr";
|
||||
@ -323,7 +318,7 @@
|
||||
/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
|
||||
regulator-name = "vdd_mpu";
|
||||
regulator-min-microvolt = <925000>;
|
||||
regulator-max-microvolt = <1325000>;
|
||||
regulator-max-microvolt = <1351500>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
@ -1,9 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
|
169
arch/arm/dts/am335x-boneblack-common.dtsi
Normal file
169
arch/arm/dts/am335x-boneblack-common.dtsi
Normal file
@ -0,0 +1,169 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
|
||||
#include <dt-bindings/display/tda998x.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
|
||||
&ldo3_reg {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
bus-width = <8>;
|
||||
status = "okay";
|
||||
non-removable;
|
||||
};
|
||||
|
||||
&am33xx_pinmux {
|
||||
nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_XDMA_EVENT_INTR0, PIN_OUTPUT_PULLDOWN, MUX_MODE3)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA0, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA1, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA2, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA3, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA4, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA5, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA6, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA7, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA8, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA9, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA10, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA11, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA12, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA13, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA14, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_DATA15, PIN_OUTPUT, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_VSYNC, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_HSYNC, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_PCLK, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_LCD_AC_BIAS_EN, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
>;
|
||||
};
|
||||
|
||||
nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_XDMA_EVENT_INTR0, PIN_OUTPUT_PULLDOWN, MUX_MODE3)
|
||||
>;
|
||||
};
|
||||
|
||||
mcasp0_pins: mcasp0_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_MCASP0_AHCLKX, PIN_INPUT_PULLUP, MUX_MODE0) /* mcasp0_ahcklx.mcasp0_ahclkx */
|
||||
AM33XX_PADCONF(AM335X_PIN_MCASP0_AHCLKR, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mcasp0_ahclkr.mcasp0_axr2*/
|
||||
AM33XX_PADCONF(AM335X_PIN_MCASP0_FSX, PIN_OUTPUT_PULLUP, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MCASP0_ACLKX, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_A11, PIN_OUTPUT_PULLDOWN, MUX_MODE7) /* gpmc_a11.GPIO1_27 */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&lcdc {
|
||||
status = "okay";
|
||||
|
||||
/* If you want to get 24 bit RGB and 16 BGR mode instead of
|
||||
* current 16 bit RGB and 24 BGR modes, set the propety
|
||||
* below to "crossed" and uncomment the video-ports -property
|
||||
* in tda19988 node.
|
||||
*/
|
||||
blue-and-red-wiring = "straight";
|
||||
|
||||
port {
|
||||
lcdc_0: endpoint@0 {
|
||||
remote-endpoint = <&hdmi_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
tda19988: tda19988@70 {
|
||||
compatible = "nxp,tda998x";
|
||||
reg = <0x70>;
|
||||
nxp,calib-gpios = <&gpio1 25 0>;
|
||||
interrupts-extended = <&gpio1 25 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
pinctrl-names = "default", "off";
|
||||
pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
|
||||
pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
|
||||
|
||||
/* Convert 24bit BGR to RGB, e.g. cross red and blue wiring */
|
||||
/* video-ports = <0x234501>; */
|
||||
|
||||
#sound-dai-cells = <0>;
|
||||
audio-ports = < TDA998x_I2S 0x03>;
|
||||
|
||||
ports {
|
||||
port@0 {
|
||||
hdmi_0: endpoint@0 {
|
||||
remote-endpoint = <&lcdc_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
system-power-controller;
|
||||
};
|
||||
|
||||
&mcasp0 {
|
||||
#sound-dai-cells = <0>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcasp0_pins>;
|
||||
status = "okay";
|
||||
op-mode = <0>; /* MCASP_IIS_MODE */
|
||||
tdm-slots = <2>;
|
||||
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
|
||||
0 0 1 0
|
||||
>;
|
||||
tx-num-evt = <32>;
|
||||
rx-num-evt = <32>;
|
||||
};
|
||||
|
||||
/ {
|
||||
memory@80000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x20000000>; /* 512 MB */
|
||||
};
|
||||
|
||||
clk_mcasp0_fixed: clk_mcasp0_fixed {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24576000>;
|
||||
};
|
||||
|
||||
clk_mcasp0: clk_mcasp0 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "gpio-gate-clock";
|
||||
clocks = <&clk_mcasp0_fixed>;
|
||||
enable-gpios = <&gpio1 27 0>; /* BeagleBone Black Clk enable on GPIO1_27 */
|
||||
};
|
||||
|
||||
sound {
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "TI BeagleBone Black";
|
||||
simple-audio-card,format = "i2s";
|
||||
simple-audio-card,bitclock-master = <&dailink0_master>;
|
||||
simple-audio-card,frame-master = <&dailink0_master>;
|
||||
|
||||
dailink0_master: simple-audio-card,cpu {
|
||||
sound-dai = <&mcasp0>;
|
||||
clocks = <&clk_mcasp0>;
|
||||
};
|
||||
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&tda19988>;
|
||||
};
|
||||
};
|
||||
};
|
@ -1,90 +1,169 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "am33xx.dtsi"
|
||||
#include "am335x-bone-common.dtsi"
|
||||
#include "am335x-boneblack-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "TI AM335x BeagleBone Black";
|
||||
compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
|
||||
chosen {
|
||||
stdout-path = &uart0;
|
||||
tick-timer = &timer2;
|
||||
};
|
||||
|
||||
&cpu0_opp_table {
|
||||
/*
|
||||
* All PG 2.0 silicon may not support 1GHz but some of the early
|
||||
* BeagleBone Blacks have PG 2.0 silicon which is guaranteed
|
||||
* to support 1GHz OPP so enable it for PG 2.0 on this board.
|
||||
*/
|
||||
oppnitro-1000000000 {
|
||||
opp-supported-hw = <0x06 0x0100>;
|
||||
};
|
||||
};
|
||||
|
||||
&ldo3_reg {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-always-on;
|
||||
&gpio0 {
|
||||
gpio-line-names =
|
||||
"[mdio_data]",
|
||||
"[mdio_clk]",
|
||||
"P9_22 [spi0_sclk]",
|
||||
"P9_21 [spi0_d0]",
|
||||
"P9_18 [spi0_d1]",
|
||||
"P9_17 [spi0_cs0]",
|
||||
"[mmc0_cd]",
|
||||
"P8_42A [ecappwm0]",
|
||||
"P8_35 [lcd d12]",
|
||||
"P8_33 [lcd d13]",
|
||||
"P8_31 [lcd d14]",
|
||||
"P8_32 [lcd d15]",
|
||||
"P9_20 [i2c2_sda]",
|
||||
"P9_19 [i2c2_scl]",
|
||||
"P9_26 [uart1_rxd]",
|
||||
"P9_24 [uart1_txd]",
|
||||
"[rmii1_txd3]",
|
||||
"[rmii1_txd2]",
|
||||
"[usb0_drvvbus]",
|
||||
"[hdmi cec]",
|
||||
"P9_41B",
|
||||
"[rmii1_txd1]",
|
||||
"P8_19 [ehrpwm2a]",
|
||||
"P8_13 [ehrpwm2b]",
|
||||
"NC",
|
||||
"NC",
|
||||
"P8_14",
|
||||
"P8_17",
|
||||
"[rmii1_txd0]",
|
||||
"[rmii1_refclk]",
|
||||
"P9_11 [uart4_rxd]",
|
||||
"P9_13 [uart4_txd]";
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
&gpio1 {
|
||||
gpio-line-names =
|
||||
"P8_25 [mmc1_dat0]",
|
||||
"[mmc1_dat1]",
|
||||
"P8_5 [mmc1_dat2]",
|
||||
"P8_6 [mmc1_dat3]",
|
||||
"P8_23 [mmc1_dat4]",
|
||||
"P8_22 [mmc1_dat5]",
|
||||
"P8_3 [mmc1_dat6]",
|
||||
"P8_4 [mmc1_dat7]",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"P8_12",
|
||||
"P8_11",
|
||||
"P8_16",
|
||||
"P8_15",
|
||||
"P9_15A",
|
||||
"P9_23",
|
||||
"P9_14 [ehrpwm1a]",
|
||||
"P9_16 [ehrpwm1b]",
|
||||
"[emmc rst]",
|
||||
"[usr0 led]",
|
||||
"[usr1 led]",
|
||||
"[usr2 led]",
|
||||
"[usr3 led]",
|
||||
"[hdmi irq]",
|
||||
"[usb vbus oc]",
|
||||
"[hdmi audio]",
|
||||
"P9_12",
|
||||
"P8_26",
|
||||
"P8_21 [emmc]",
|
||||
"P8_20 [emmc]";
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
bus-width = <8>;
|
||||
status = "okay";
|
||||
&gpio2 {
|
||||
gpio-line-names =
|
||||
"P9_15B",
|
||||
"P8_18",
|
||||
"P8_7",
|
||||
"P8_8",
|
||||
"P8_10",
|
||||
"P8_9",
|
||||
"P8_45 [hdmi]",
|
||||
"P8_46 [hdmi]",
|
||||
"P8_43 [hdmi]",
|
||||
"P8_44 [hdmi]",
|
||||
"P8_41 [hdmi]",
|
||||
"P8_42 [hdmi]",
|
||||
"P8_39 [hdmi]",
|
||||
"P8_40 [hdmi]",
|
||||
"P8_37 [hdmi]",
|
||||
"P8_38 [hdmi]",
|
||||
"P8_36 [hdmi]",
|
||||
"P8_34 [hdmi]",
|
||||
"[rmii1_rxd3]",
|
||||
"[rmii1_rxd2]",
|
||||
"[rmii1_rxd1]",
|
||||
"[rmii1_rxd0]",
|
||||
"P8_27 [hdmi]",
|
||||
"P8_29 [hdmi]",
|
||||
"P8_28 [hdmi]",
|
||||
"P8_30 [hdmi]",
|
||||
"[mmc0_dat3]",
|
||||
"[mmc0_dat2]",
|
||||
"[mmc0_dat1]",
|
||||
"[mmc0_dat0]",
|
||||
"[mmc0_clk]",
|
||||
"[mmc0_cmd]";
|
||||
};
|
||||
|
||||
&am33xx_pinmux {
|
||||
nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x1b0 0x03 /* xdma_event_intr0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT */
|
||||
0xa0 0x08 /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xa4 0x08 /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xa8 0x08 /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xac 0x08 /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xb0 0x08 /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xb4 0x08 /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xb8 0x08 /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xbc 0x08 /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xc0 0x08 /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xc4 0x08 /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xc8 0x08 /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xcc 0x08 /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xd0 0x08 /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xd4 0x08 /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xd8 0x08 /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xdc 0x08 /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
|
||||
0xe0 0x00 /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
|
||||
0xe4 0x00 /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
|
||||
0xe8 0x00 /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
|
||||
0xec 0x00 /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
|
||||
>;
|
||||
};
|
||||
nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x1b0 0x03 /* xdma_event_intr0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&lcdc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/ {
|
||||
hdmi {
|
||||
compatible = "ti,tilcdc,slave";
|
||||
i2c = <&i2c0>;
|
||||
pinctrl-names = "default", "off";
|
||||
pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
|
||||
pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
system-power-controller;
|
||||
&gpio3 {
|
||||
gpio-line-names =
|
||||
"[mii col]",
|
||||
"[mii crs]",
|
||||
"[mii rx err]",
|
||||
"[mii tx en]",
|
||||
"[mii rx dv]",
|
||||
"[i2c0 sda]",
|
||||
"[i2c0 scl]",
|
||||
"[jtag emu0]",
|
||||
"[jtag emu1]",
|
||||
"[mii tx clk]",
|
||||
"[mii rx clk]",
|
||||
"NC",
|
||||
"NC",
|
||||
"[usb vbus en]",
|
||||
"P9_31 [spi1_sclk]",
|
||||
"P9_29 [spi1_d0]",
|
||||
"P9_30 [spi1_d1]",
|
||||
"P9_28 [spi1_cs0]",
|
||||
"P9_42B [ecappwm0]",
|
||||
"P9_27",
|
||||
"P9_41A",
|
||||
"P9_25",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC",
|
||||
"NC";
|
||||
};
|
||||
|
41
arch/arm/dts/am335x-bonegreen-common.dtsi
Normal file
41
arch/arm/dts/am335x-bonegreen-common.dtsi
Normal file
@ -0,0 +1,41 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
|
||||
&ldo3_reg {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
bus-width = <8>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&am33xx_pinmux {
|
||||
uart2_pins: uart2_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_SPI0_SCLK, PIN_INPUT, MUX_MODE1) /* spi0_sclk.uart2_rxd */
|
||||
AM33XX_PADCONF(AM335X_PIN_SPI0_D0, PIN_OUTPUT, MUX_MODE1) /* spi0_d0.uart2_txd */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart2_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rtc {
|
||||
system-power-controller;
|
||||
};
|
@ -1,57 +1,14 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "am33xx.dtsi"
|
||||
#include "am335x-bone-common.dtsi"
|
||||
#include "am335x-bonegreen-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "TI AM335x BeagleBone Green";
|
||||
compatible = "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
|
||||
chosen {
|
||||
stdout-path = &uart0;
|
||||
tick-timer = &timer2;
|
||||
};
|
||||
};
|
||||
|
||||
&ldo3_reg {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
bus-width = <8>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&am33xx_pinmux {
|
||||
uart2_pins: uart2_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_IOPAD(0x950, PIN_INPUT | MUX_MODE1) /* spi0_sclk.uart2_rxd */
|
||||
AM33XX_IOPAD(0x954, PIN_OUTPUT | MUX_MODE1) /* spi0_d0.uart2_txd */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart2_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rtc {
|
||||
system-power-controller;
|
||||
};
|
||||
|
137
arch/arm/dts/am335x-sancloud-bbe.dts
Normal file
137
arch/arm/dts/am335x-sancloud-bbe.dts
Normal file
@ -0,0 +1,137 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "am33xx.dtsi"
|
||||
#include "am335x-bone-common.dtsi"
|
||||
#include "am335x-boneblack-common.dtsi"
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
|
||||
/ {
|
||||
model = "SanCloud BeagleBone Enhanced";
|
||||
compatible = "sancloud,am335x-boneenhanced", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
|
||||
};
|
||||
|
||||
&am33xx_pinmux {
|
||||
pinctrl-names = "default";
|
||||
|
||||
cpsw_default: cpsw_default {
|
||||
pinctrl-single,pins = <
|
||||
/* Slave 1 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_EN, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mii1_txen.rgmii1_tctl */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_DV, PIN_INPUT_PULLDOWN, MUX_MODE2) /* mii1_rxdv.rgmii1_rctl */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD3, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mii1_txd3.rgmii1_td3 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD2, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mii1_txd2.rgmii1_td2 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD1, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mii1_txd1.rgmii1_td1 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD0, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mii1_txd0.rgmii1_td0 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_CLK, PIN_OUTPUT_PULLDOWN, MUX_MODE2) /* mii1_txclk.rgmii1_tclk */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_CLK, PIN_INPUT_PULLDOWN, MUX_MODE2) /* mii1_rxclk.rgmii1_rclk */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD3, PIN_INPUT_PULLDOWN, MUX_MODE2) /* mii1_rxd3.rgmii1_rd3 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD2, PIN_INPUT_PULLDOWN, MUX_MODE2) /* mii1_rxd2.rgmii1_rd2 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD1, PIN_INPUT_PULLDOWN, MUX_MODE2) /* mii1_rxd1.rgmii1_rd1 */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD0, PIN_INPUT_PULLDOWN, MUX_MODE2) /* mii1_rxd0.rgmii1_rd0 */
|
||||
>;
|
||||
};
|
||||
|
||||
cpsw_sleep: cpsw_sleep {
|
||||
pinctrl-single,pins = <
|
||||
/* Slave 1 reset value */
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_EN, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_DV, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD3, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD2, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD1, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TXD0, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_TX_CLK, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RX_CLK, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD3, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD2, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD1, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MII1_RXD0, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
>;
|
||||
};
|
||||
|
||||
davinci_mdio_default: davinci_mdio_default {
|
||||
pinctrl-single,pins = <
|
||||
/* MDIO */
|
||||
AM33XX_PADCONF(AM335X_PIN_MDIO, PIN_INPUT_PULLUP | SLEWCTRL_FAST, MUX_MODE0)
|
||||
AM33XX_PADCONF(AM335X_PIN_MDC, PIN_OUTPUT_PULLUP, MUX_MODE0)
|
||||
>;
|
||||
};
|
||||
|
||||
davinci_mdio_sleep: davinci_mdio_sleep {
|
||||
pinctrl-single,pins = <
|
||||
/* MDIO reset value */
|
||||
AM33XX_PADCONF(AM335X_PIN_MDIO, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
AM33XX_PADCONF(AM335X_PIN_MDC, PIN_INPUT_PULLDOWN, MUX_MODE7)
|
||||
>;
|
||||
};
|
||||
|
||||
usb_hub_ctrl: usb_hub_ctrl {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_RMII1_REF_CLK, PIN_OUTPUT_PULLUP, MUX_MODE7) /* rmii1_refclk.gpio0_29 */
|
||||
>;
|
||||
};
|
||||
|
||||
mpu6050_pins: pinmux_mpu6050_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_UART0_CTSN, PIN_INPUT, MUX_MODE7) /* uart0_ctsn.gpio1_8 */
|
||||
>;
|
||||
};
|
||||
|
||||
lps3331ap_pins: pinmux_lps3331ap_pins {
|
||||
pinctrl-single,pins = <
|
||||
AM33XX_PADCONF(AM335X_PIN_GPMC_A10, PIN_INPUT, MUX_MODE7) /* gpmc_a10.gpio1_26 */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&mac {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&cpsw_default>;
|
||||
pinctrl-1 = <&cpsw_sleep>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&davinci_mdio {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&davinci_mdio_default>;
|
||||
pinctrl-1 = <&davinci_mdio_sleep>;
|
||||
status = "okay";
|
||||
|
||||
ethphy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&cpsw_emac0 {
|
||||
phy-handle = <ðphy0>;
|
||||
phy-mode = "rgmii-id";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
lps331ap: barometer@5c {
|
||||
compatible = "st,lps331ap-press";
|
||||
st,drdy-int-pin = <1>;
|
||||
reg = <0x5c>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <26 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
|
||||
mpu6050: accelerometer@68 {
|
||||
compatible = "invensense,mpu6050";
|
||||
reg = <0x68>;
|
||||
interrupt-parent = <&gpio0>;
|
||||
interrupts = <2 IRQ_TYPE_EDGE_RISING>;
|
||||
orientation = <0xff 0 0 0 1 0 0 0 0xff>;
|
||||
};
|
||||
|
||||
usb2512b: usb-hub@2c {
|
||||
compatible = "microchip,usb2512b";
|
||||
reg = <0x2c>;
|
||||
reset-gpios = <&gpio0 29 GPIO_ACTIVE_LOW>;
|
||||
/* wifi on port 4 */
|
||||
};
|
||||
};
|
@ -8,6 +8,10 @@
|
||||
stdout-path = "serial2:115200n8";
|
||||
tick-timer = &timer1;
|
||||
};
|
||||
|
||||
aliases {
|
||||
mmc1 = &sdhci1;
|
||||
};
|
||||
};
|
||||
|
||||
&cbass_main{
|
||||
@ -79,6 +83,7 @@
|
||||
};
|
||||
|
||||
&sdhci0 {
|
||||
status = "disabled";
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
|
@ -76,3 +76,7 @@
|
||||
&tx_pru2_1 {
|
||||
remoteproc-name = "tx_pru2_1";
|
||||
};
|
||||
|
||||
&mcu_r5fss0 {
|
||||
ti,cluster-mode = <0>;
|
||||
};
|
||||
|
@ -188,3 +188,15 @@
|
||||
&hbmc_mux {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&serdes_ln_ctrl {
|
||||
u-boot,mux-autoprobe;
|
||||
};
|
||||
|
||||
&usb_serdes_mux {
|
||||
u-boot,mux-autoprobe;
|
||||
};
|
||||
|
||||
&serdes0 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/net/ti-dp83867.h>
|
||||
#include <dt-bindings/mux/ti-serdes.h>
|
||||
#include <dt-bindings/phy/phy.h>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
@ -281,3 +282,25 @@
|
||||
ti,adc-channels = <0 1 2 3 4 5 6 7>;
|
||||
};
|
||||
};
|
||||
|
||||
&serdes_refclk {
|
||||
clock-frequency = <100000000>;
|
||||
};
|
||||
|
||||
&serdes0 {
|
||||
serdes0_pcie_link: link@0 {
|
||||
reg = <0>;
|
||||
cdns,num-lanes = <2>;
|
||||
#phy-cells = <0>;
|
||||
cdns,phy-type = <PHY_TYPE_PCIE>;
|
||||
resets = <&serdes_wiz0 1>, <&serdes_wiz0 2>;
|
||||
};
|
||||
|
||||
serdes0_qsgmii_link: link@1 {
|
||||
reg = <2>;
|
||||
cdns,num-lanes = <1>;
|
||||
#phy-cells = <0>;
|
||||
cdns,phy-type = <PHY_TYPE_QSGMII>;
|
||||
resets = <&serdes_wiz0 3>;
|
||||
};
|
||||
};
|
||||
|
@ -5,6 +5,13 @@
|
||||
* Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
|
||||
/ {
|
||||
serdes_refclk: serdes-refclk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
};
|
||||
};
|
||||
|
||||
&cbass_main {
|
||||
msmc_ram: sram@70000000 {
|
||||
compatible = "mmio-sram";
|
||||
@ -428,10 +435,14 @@
|
||||
ti,otap-del-sel-mmc-hs = <0x0>;
|
||||
ti,otap-del-sel-ddr52 = <0x6>;
|
||||
ti,otap-del-sel-hs200 = <0x8>;
|
||||
ti,otap-del-sel-hs400 = <0x0>;
|
||||
ti,otap-del-sel-hs400 = <0x5>;
|
||||
ti,itap-del-sel-legacy = <0x10>;
|
||||
ti,itap-del-sel-mmc-hs = <0xa>;
|
||||
ti,strobe-sel = <0x77>;
|
||||
ti,clkbuf-sel = <0x7>;
|
||||
ti,trm-icp = <0x8>;
|
||||
bus-width = <8>;
|
||||
mmc-hs400-1_8v;
|
||||
mmc-hs200-1_8v;
|
||||
mmc-ddr-1_8v;
|
||||
dma-coherent;
|
||||
@ -451,7 +462,12 @@
|
||||
ti,otap-del-sel-sdr50 = <0xc>;
|
||||
ti,otap-del-sel-sdr104 = <0x5>;
|
||||
ti,otap-del-sel-ddr50 = <0xc>;
|
||||
ti,itap-del-sel-legacy = <0x0>;
|
||||
ti,itap-del-sel-sd-hs = <0x0>;
|
||||
ti,itap-del-sel-sdr12 = <0x0>;
|
||||
ti,itap-del-sel-sdr25 = <0x0>;
|
||||
ti,clkbuf-sel = <0x7>;
|
||||
ti,trm-icp = <0x8>;
|
||||
dma-coherent;
|
||||
};
|
||||
|
||||
@ -554,6 +570,62 @@
|
||||
clock-names = "gpio";
|
||||
};
|
||||
|
||||
serdes_wiz0: wiz@5060000 {
|
||||
compatible = "ti,j721e-wiz-10g";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
power-domains = <&k3_pds 292 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 292 11>, <&k3_clks 292 85>, <&serdes_refclk>;
|
||||
clock-names = "fck", "core_ref_clk", "ext_ref_clk";
|
||||
num-lanes = <4>;
|
||||
#reset-cells = <1>;
|
||||
ranges = <0x5060000 0x0 0x5060000 0x10000>;
|
||||
|
||||
assigned-clocks = <&k3_clks 292 85>;
|
||||
assigned-clock-parents = <&k3_clks 292 89>;
|
||||
|
||||
wiz0_pll0_refclk: pll0-refclk {
|
||||
clocks = <&k3_clks 292 85>, <&serdes_refclk>;
|
||||
clock-output-names = "wiz0_pll0_refclk";
|
||||
#clock-cells = <0>;
|
||||
assigned-clocks = <&wiz0_pll0_refclk>;
|
||||
assigned-clock-parents = <&k3_clks 292 85>;
|
||||
};
|
||||
|
||||
wiz0_pll1_refclk: pll1-refclk {
|
||||
clocks = <&k3_clks 292 85>, <&serdes_refclk>;
|
||||
clock-output-names = "wiz0_pll1_refclk";
|
||||
#clock-cells = <0>;
|
||||
assigned-clocks = <&wiz0_pll1_refclk>;
|
||||
assigned-clock-parents = <&k3_clks 292 85>;
|
||||
};
|
||||
|
||||
wiz0_refclk_dig: refclk-dig {
|
||||
clocks = <&k3_clks 292 85>, <&serdes_refclk>;
|
||||
clock-output-names = "wiz0_refclk_dig";
|
||||
#clock-cells = <0>;
|
||||
assigned-clocks = <&wiz0_refclk_dig>;
|
||||
assigned-clock-parents = <&k3_clks 292 85>;
|
||||
};
|
||||
|
||||
wiz0_cmn_refclk_dig_div: cmn-refclk-dig-div {
|
||||
clocks = <&wiz0_refclk_dig>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
serdes0: serdes@5060000 {
|
||||
compatible = "ti,j721e-serdes-10g";
|
||||
reg = <0x05060000 0x00010000>;
|
||||
reg-names = "torrent_phy";
|
||||
resets = <&serdes_wiz0 0>;
|
||||
reset-names = "torrent_reset";
|
||||
clocks = <&wiz0_pll0_refclk>;
|
||||
clock-names = "refclk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
usbss0: cdns-usb@4104000 {
|
||||
compatible = "ti,j721e-usb";
|
||||
reg = <0x00 0x4104000 0x00 0x100>;
|
||||
|
@ -129,13 +129,17 @@
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&wiz3_pll1_refclk {
|
||||
assigned-clocks = <&wiz3_pll1_refclk>, <&wiz3_pll0_refclk>;
|
||||
assigned-clock-parents = <&k3_clks 295 0>, <&k3_clks 295 9>;
|
||||
};
|
||||
|
||||
&main_usbss0_pins_default {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usbss0 {
|
||||
u-boot,dm-spl;
|
||||
ti,usb2-only;
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
@ -215,3 +219,16 @@
|
||||
&main_r5fss1 {
|
||||
ti,cluster-mode = <0>;
|
||||
};
|
||||
|
||||
&wiz3_pll1_refclk {
|
||||
assigned-clocks = <&wiz3_pll1_refclk>, <&wiz3_pll0_refclk>;
|
||||
assigned-clock-parents = <&k3_clks 295 0>, <&k3_clks 295 9>;
|
||||
};
|
||||
|
||||
&serdes_ln_ctrl {
|
||||
u-boot,mux-autoprobe;
|
||||
};
|
||||
|
||||
&usb_serdes_mux {
|
||||
u-boot,mux-autoprobe;
|
||||
};
|
||||
|
@ -13,8 +13,6 @@
|
||||
aliases {
|
||||
remoteproc0 = &sysctrler;
|
||||
remoteproc1 = &a72_0;
|
||||
remoteproc2 = &main_r5fss0_core0;
|
||||
remoteproc3 = &main_r5fss0_core1;
|
||||
};
|
||||
|
||||
fs_loader0: fs_loader@0 {
|
||||
@ -23,18 +21,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
&main_r5fss0 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&main_r5fss0_core0 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&main_r5fss0_core1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&tps659413a {
|
||||
esm: esm {
|
||||
compatible = "ti,tps659413-esm";
|
||||
|
@ -13,8 +13,6 @@
|
||||
aliases {
|
||||
remoteproc0 = &sysctrler;
|
||||
remoteproc1 = &a72_0;
|
||||
remoteproc2 = &main_r5fss0_core0;
|
||||
remoteproc3 = &main_r5fss0_core1;
|
||||
};
|
||||
|
||||
chosen {
|
||||
|
@ -198,7 +198,7 @@ void board_init_f(ulong dummy)
|
||||
#endif
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
u32 spl_mmc_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (boot_device) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
|
@ -193,10 +193,6 @@ int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr)
|
||||
}
|
||||
#endif
|
||||
|
||||
__weak void start_non_linux_remote_cores(void)
|
||||
{
|
||||
}
|
||||
|
||||
void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
|
||||
{
|
||||
typedef void __noreturn (*image_entry_noargs_t)(void);
|
||||
@ -214,7 +210,6 @@ void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
|
||||
init_env();
|
||||
|
||||
if (!fit_image_info[IMAGE_ID_DM_FW].image_start) {
|
||||
start_non_linux_remote_cores();
|
||||
size = load_firmware("name_mcur5f0_0fw", "addr_mcur5f0_0load",
|
||||
&loadaddr);
|
||||
}
|
||||
|
@ -22,7 +22,6 @@ void setup_k3_mpu_regions(void);
|
||||
int early_console_init(void);
|
||||
void disable_linefill_optimization(void);
|
||||
void remove_fwl_configs(struct fwl_data *fwl_data, size_t fwl_data_size);
|
||||
void start_non_linux_remote_cores(void);
|
||||
int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr);
|
||||
void k3_sysfw_print_ver(void);
|
||||
void spl_enable_dcache(void);
|
||||
|
@ -370,39 +370,3 @@ void release_resources_for_core_shutdown(void)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SYS_K3_SPL_ATF
|
||||
void start_non_linux_remote_cores(void)
|
||||
{
|
||||
int size = 0, ret;
|
||||
u32 loadaddr = 0;
|
||||
|
||||
if (!soc_is_j721e())
|
||||
return;
|
||||
|
||||
size = load_firmware("name_mainr5f0_0fw", "addr_mainr5f0_0load",
|
||||
&loadaddr);
|
||||
if (size <= 0)
|
||||
goto err_load;
|
||||
|
||||
/* assuming remoteproc 2 is aliased for the needed remotecore */
|
||||
ret = rproc_load(2, loadaddr, size);
|
||||
if (ret) {
|
||||
printf("Firmware failed to start on rproc (%d)\n", ret);
|
||||
goto err_load;
|
||||
}
|
||||
|
||||
ret = rproc_start(2);
|
||||
if (ret) {
|
||||
printf("Firmware init failed on rproc (%d)\n", ret);
|
||||
goto err_load;
|
||||
}
|
||||
|
||||
printf("Remoteproc 2 started successfully\n");
|
||||
|
||||
return;
|
||||
|
||||
err_load:
|
||||
rproc_reset(2);
|
||||
}
|
||||
#endif
|
||||
|
@ -954,6 +954,8 @@ int board_fit_config_name_match(const char *name)
|
||||
return 0;
|
||||
else if (board_is_icev2() && !strcmp(name, "am335x-icev2"))
|
||||
return 0;
|
||||
else if (board_is_bben() && !strcmp(name, "am335x-sancloud-bbe"))
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
@ -1,277 +0,0 @@
|
||||
Introduction:
|
||||
-------------
|
||||
The J721e family of SoCs are part of K3 Multicore SoC architecture platform
|
||||
targeting automotive applications. They are designed as a low power, high
|
||||
performance and highly integrated device architecture, adding significant
|
||||
enhancement on processing power, graphics capability, video and imaging
|
||||
processing, virtualization and coherent memory support.
|
||||
|
||||
The device is partitioned into three functional domains, each containing
|
||||
specific processing cores and peripherals:
|
||||
1. Wake-up (WKUP) domain:
|
||||
- Device Management and Security Controller (DMSC)
|
||||
2. Microcontroller (MCU) domain:
|
||||
- Dual Core ARM Cortex-R5F processor
|
||||
3. MAIN domain:
|
||||
- Dual core 64-bit ARM Cortex-A72
|
||||
- 2 x Dual cortex ARM Cortex-R5 subsystem
|
||||
- 2 x C66x Digital signal processor sub system
|
||||
- C71x Digital signal processor sub-system with MMA.
|
||||
|
||||
More info can be found in TRM: http://www.ti.com/lit/pdf/spruil1
|
||||
|
||||
Boot Flow:
|
||||
----------
|
||||
Boot flow is similar to that of AM65x SoC and extending it with remoteproc
|
||||
support. Below is the pictorial representation of boot flow:
|
||||
|
||||
+------------------------------------------------------------------------+-----------------------+
|
||||
| DMSC | MCU R5 | A72 | MAIN R5/C66x/C7x |
|
||||
+------------------------------------------------------------------------+-----------------------+
|
||||
| +--------+ | | | |
|
||||
| | Reset | | | | |
|
||||
| +--------+ | | | |
|
||||
| : | | | |
|
||||
| +--------+ | +-----------+ | | |
|
||||
| | *ROM* |----------|-->| Reset rls | | | |
|
||||
| +--------+ | +-----------+ | | |
|
||||
| | | | : | | |
|
||||
| | ROM | | : | | |
|
||||
| |services| | : | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | *R5 ROM* | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | |<---------|---|Load and auth| | | |
|
||||
| | | | | tiboot3.bin | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | : | | |
|
||||
| | | | : | | |
|
||||
| | | | : | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | *R5 SPL* | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | Load | | | |
|
||||
| | | | | sysfw.itb | | | |
|
||||
| | Start | | +-------------+ | | |
|
||||
| | System |<---------|---| Start | | | |
|
||||
| |Firmware| | | SYSFW | | | |
|
||||
| +--------+ | +-------------+ | | |
|
||||
| : | | | | | |
|
||||
| +---------+ | | Load | | | |
|
||||
| | *SYSFW* | | | system | | | |
|
||||
| +---------+ | | Config data | | | |
|
||||
| | |<--------|---| | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | DDR | | | |
|
||||
| | | | | config | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | Load | | | |
|
||||
| | | | | tispl.bin | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | Load R5 | | | |
|
||||
| | | | | firmware | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | |<--------|---| Start A72 | | | |
|
||||
| | | | | and jump to | | | |
|
||||
| | | | | DM fw image | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |---------|-----------------------|---->| Reset rls | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | TIFS | | | : | |
|
||||
| |Services | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|---->|*ATF/OPTEE*| | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | : | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|---->| *A72 SPL* | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | | Load | | |
|
||||
| | | | | | u-boot.img| | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | : | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|---->| *U-Boot* | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | | prompt | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | | Load R5 | | |
|
||||
| | | | | | Firmware | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|-----| Start R5 | | +-----------+ |
|
||||
| | |---------|-----------------------|-----+-----------+-----|----->| R5 starts | |
|
||||
| | | | | | Load C6 | | +-----------+ |
|
||||
| | | | | | Firmware | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|-----| Start C6 | | +-----------+ |
|
||||
| | |---------|-----------------------|-----+-----------+-----|----->| C6 starts | |
|
||||
| | | | | | Load C7 | | +-----------+ |
|
||||
| | | | | | Firmware | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|-----| Start C7 | | +-----------+ |
|
||||
| | |---------|-----------------------|-----+-----------+-----|----->| C7 starts | |
|
||||
| +---------+ | | | +-----------+ |
|
||||
| | | | |
|
||||
+------------------------------------------------------------------------+-----------------------+
|
||||
|
||||
- Here DMSC acts as master and provides all the critical services. R5/A72
|
||||
requests DMSC to get these services done as shown in the above diagram.
|
||||
|
||||
Sources:
|
||||
--------
|
||||
1. SYSFW:
|
||||
Tree: git://git.ti.com/k3-image-gen/k3-image-gen.git
|
||||
Branch: master
|
||||
|
||||
2. ATF:
|
||||
Tree: https://github.com/ARM-software/arm-trusted-firmware.git
|
||||
Branch: master
|
||||
|
||||
3. OPTEE:
|
||||
Tree: https://github.com/OP-TEE/optee_os.git
|
||||
Branch: master
|
||||
|
||||
4. U-Boot:
|
||||
Tree: https://source.denx.de/u-boot/u-boot
|
||||
Branch: master
|
||||
|
||||
Build procedure:
|
||||
----------------
|
||||
1. SYSFW:
|
||||
$ make CROSS_COMPILE=arm-linux-gnueabihf-
|
||||
|
||||
2. ATF:
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu- ARCH=aarch64 PLAT=k3 TARGET_BOARD=generic SPD=opteed
|
||||
|
||||
3. OPTEE:
|
||||
$ make PLATFORM=k3-j721e CFG_ARM64_core=y
|
||||
|
||||
4. U-Boot:
|
||||
|
||||
4.1. R5:
|
||||
$ make CROSS_COMPILE=arm-linux-gnueabihf- j721e_evm_r5_defconfig O=/tmp/r5
|
||||
$ make CROSS_COMPILE=arm-linux-gnueabihf- O=/tmp/r5
|
||||
|
||||
4.2. A72:
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu- j721e_evm_a72_defconfig O=/tmp/a72
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu- ATF=<path to ATF dir>/build/k3/generic/release/bl31.bin TEE=<path to OPTEE OS dir>/out/arm-plat-k3/core/tee-pager_v2.bin DM=<path to DM firmware image> O=/tmp/a72
|
||||
|
||||
Target Images
|
||||
--------------
|
||||
Copy the below images to an SD card and boot:
|
||||
- sysfw.itb from step 1
|
||||
- tiboot3.bin from step 4.1
|
||||
- tispl.bin, u-boot.img from 4.2
|
||||
|
||||
Image formats:
|
||||
--------------
|
||||
|
||||
- tiboot3.bin:
|
||||
+-----------------------+
|
||||
| X.509 |
|
||||
| Certificate |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | R5 | |
|
||||
| | u-boot-spl.bin | |
|
||||
| | | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | FIT header | |
|
||||
| | +---------------+ | |
|
||||
| | | | | |
|
||||
| | | DTB 1...N | | |
|
||||
| | +---------------+ | |
|
||||
| +-------------------+ |
|
||||
+-----------------------+
|
||||
|
||||
- tispl.bin
|
||||
+-----------------------+
|
||||
| |
|
||||
| FIT HEADER |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | A72 ATF | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | A72 OPTEE | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | R5 DM FW | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | A72 SPL | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | SPL DTB 1...N | |
|
||||
| +-------------------+ |
|
||||
+-----------------------+
|
||||
|
||||
- sysfw.itb
|
||||
+-----------------------+
|
||||
| |
|
||||
| FIT HEADER |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | sysfw.bin | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | board config | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | PM config | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | RM config | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | Secure config | |
|
||||
| +-------------------+ |
|
||||
+-----------------------+
|
||||
|
||||
OSPI:
|
||||
-----
|
||||
ROM supports booting from OSPI from offset 0x0.
|
||||
|
||||
Flashing images to OSPI:
|
||||
|
||||
Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img,
|
||||
and sysfw.itb over tftp and then flash those to OSPI at their respective
|
||||
addresses.
|
||||
|
||||
=> sf probe
|
||||
=> tftp ${loadaddr} tiboot3.bin
|
||||
=> sf update $loadaddr 0x0 $filesize
|
||||
=> tftp ${loadaddr} tispl.bin
|
||||
=> sf update $loadaddr 0x80000 $filesize
|
||||
=> tftp ${loadaddr} u-boot.img
|
||||
=> sf update $loadaddr 0x280000 $filesize
|
||||
=> tftp ${loadaddr} sysfw.itb
|
||||
=> sf update $loadaddr 0x6C0000 $filesize
|
||||
|
||||
Flash layout for OSPI:
|
||||
|
||||
0x0 +----------------------------+
|
||||
| ospi.tiboot3(512K) |
|
||||
| |
|
||||
0x80000 +----------------------------+
|
||||
| ospi.tispl(2M) |
|
||||
| |
|
||||
0x280000 +----------------------------+
|
||||
| ospi.u-boot(4M) |
|
||||
| |
|
||||
0x680000 +----------------------------+
|
||||
| ospi.env(128K) |
|
||||
| |
|
||||
0x6A0000 +----------------------------+
|
||||
| ospi.env.backup (128K) |
|
||||
| |
|
||||
0x6C0000 +----------------------------+
|
||||
| ospi.sysfw(1M) |
|
||||
| |
|
||||
0x7C0000 +----------------------------+
|
||||
| padding (256k) |
|
||||
0x800000 +----------------------------+
|
||||
| ospi.rootfs(UBIFS) |
|
||||
| |
|
||||
+----------------------------+
|
@ -10,6 +10,7 @@
|
||||
#include <common.h>
|
||||
#include <env.h>
|
||||
#include <fdt_support.h>
|
||||
#include <generic-phy.h>
|
||||
#include <image.h>
|
||||
#include <init.h>
|
||||
#include <log.h>
|
||||
@ -29,7 +30,8 @@
|
||||
#define board_is_j721e_som() (board_ti_k3_is("J721EX-PM1-SOM") || \
|
||||
board_ti_k3_is("J721EX-PM2-SOM"))
|
||||
|
||||
#define board_is_j7200_som() board_ti_k3_is("J7200X-PM1-SOM")
|
||||
#define board_is_j7200_som() (board_ti_k3_is("J7200X-PM1-SOM") || \
|
||||
board_ti_k3_is("J7200X-PM2-SOM"))
|
||||
|
||||
/* Max number of MAC addresses that are parsed/processed per daughter card */
|
||||
#define DAUGHTER_CARD_NO_OF_MAC_ADDR 8
|
||||
@ -384,6 +386,33 @@ static int probe_daughtercards(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
void configure_serdes_torrent(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
struct phy serdes;
|
||||
int ret;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_PHY_CADENCE_TORRENT))
|
||||
return;
|
||||
|
||||
ret = uclass_get_device_by_driver(UCLASS_PHY,
|
||||
DM_DRIVER_GET(torrent_phy_provider),
|
||||
&dev);
|
||||
if (ret)
|
||||
printf("Torrent init failed:%d\n", ret);
|
||||
|
||||
serdes.dev = dev;
|
||||
serdes.id = 0;
|
||||
|
||||
ret = generic_phy_init(&serdes);
|
||||
if (ret)
|
||||
printf("phy_init failed!!\n");
|
||||
|
||||
ret = generic_phy_power_on(&serdes);
|
||||
if (ret)
|
||||
printf("phy_power_on failed !!\n");
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_TI_I2C_BOARD_DETECT)) {
|
||||
@ -394,6 +423,9 @@ int board_late_init(void)
|
||||
probe_daughtercards();
|
||||
}
|
||||
|
||||
if (board_is_j7200_som())
|
||||
configure_serdes_torrent();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -368,6 +368,9 @@ struct pin_cfg k2g_ice_evm_pin_cfg[] = {
|
||||
{ 98, BUFFER_CLASS_B | PIN_PDIS | MODE(0) }, /* MDIO_DATA */
|
||||
{ 99, BUFFER_CLASS_B | PIN_PDIS | MODE(0) }, /* MDIO_CLK */
|
||||
|
||||
/* ICSS1 Padconf Workaround */
|
||||
{ 202, MODE(1) | PIN_PDIS }, /* PR1_PRU1_GPO1.PR1_PRU1_GPI1 (PR1_MII1_RXD1) */
|
||||
|
||||
{ MAX_PIN_N, }
|
||||
};
|
||||
|
||||
|
@ -37,7 +37,7 @@ CONFIG_MTDIDS_DEFAULT="nand0=nand.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_LIST="am335x-evm am335x-bone am335x-boneblack am335x-evmsk am335x-bonegreen am335x-icev2 am335x-pocketbeagle"
|
||||
CONFIG_OF_LIST="am335x-evm am335x-bone am335x-sancloud-bbe am335x-boneblack am335x-evmsk am335x-bonegreen am335x-icev2 am335x-pocketbeagle"
|
||||
CONFIG_ENV_OVERWRITE=y
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
@ -67,6 +67,7 @@ CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_PHY_SMSC=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_DRIVER_TI_CPSW=y
|
||||
CONFIG_SPI=y
|
||||
|
@ -8,6 +8,7 @@ CONFIG_SOC_K3_AM642=y
|
||||
CONFIG_K3_ATF_LOAD_ADDR=0x701c0000
|
||||
CONFIG_TARGET_AM642_A53_EVM=y
|
||||
CONFIG_ENV_SIZE=0x20000
|
||||
CONFIG_ENV_OFFSET=0x680000
|
||||
CONFIG_SYS_SPI_U_BOOT_OFFS=0x280000
|
||||
CONFIG_SPL_DM_SPI=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="k3-am642-evm"
|
||||
@ -29,6 +30,8 @@ CONFIG_BOARD_LATE_INIT=y
|
||||
CONFIG_SPL_SYS_MALLOC_SIMPLE=y
|
||||
CONFIG_SPL_STACK_R=y
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1400
|
||||
CONFIG_SPL_DMA=y
|
||||
CONFIG_SPL_ENV_SUPPORT=y
|
||||
CONFIG_SPL_I2C=y
|
||||
@ -46,6 +49,7 @@ CONFIG_SPL_YMODEM_SUPPORT=y
|
||||
CONFIG_CMD_ASKENV=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_DM=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
@ -56,10 +60,10 @@ CONFIG_OF_LIST="k3-am642-evm k3-am642-sk"
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_SPL_MULTI_DTB_FIT=y
|
||||
CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
|
||||
CONFIG_ENV_IS_NOWHERE=y
|
||||
CONFIG_ENV_IS_IN_FAT=y
|
||||
CONFIG_ENV_FAT_DEVICE_AND_PART="1:1"
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_SYS_MMC_ENV_DEV=0
|
||||
CONFIG_SYS_MMC_ENV_PART=1
|
||||
CONFIG_DM=y
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||
@ -81,6 +85,12 @@ CONFIG_DM_I2C=y
|
||||
CONFIG_SYS_I2C_OMAP24XX=y
|
||||
CONFIG_DM_MAILBOX=y
|
||||
CONFIG_K3_SEC_PROXY=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_MMC_HS200_SUPPORT=y
|
||||
CONFIG_SPL_MMC_HS200_SUPPORT=y
|
||||
CONFIG_MMC_HS400_SUPPORT=y
|
||||
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||
CONFIG_SPL_MMC_HS400_SUPPORT=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_ADMA=y
|
||||
CONFIG_SPL_MMC_SDHCI_ADMA=y
|
||||
@ -130,4 +140,6 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x0451
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x6165
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_USB_FUNCTION_MASS_STORAGE=y
|
||||
CONFIG_FAT_WRITE=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_FS_FAT_MAX_CLUSTSIZE=16384
|
||||
|
@ -7,11 +7,15 @@ CONFIG_SYS_MALLOC_F_LEN=0x80000
|
||||
CONFIG_SOC_K3_AM642=y
|
||||
CONFIG_TARGET_AM642_R5_EVM=y
|
||||
CONFIG_ENV_SIZE=0x20000
|
||||
CONFIG_ENV_OFFSET=0x680000
|
||||
CONFIG_SYS_SPI_U_BOOT_OFFS=0x80000
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_SPL_DM_SPI=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="k3-am642-r5-evm"
|
||||
CONFIG_SPL_TEXT_BASE=0x70020000
|
||||
CONFIG_SPL_TEXT_BASE=0x70000000
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_SYS_MMC_ENV_DEV=0
|
||||
CONFIG_SYS_MMC_ENV_PART=1
|
||||
CONFIG_SPL_MMC_SUPPORT=y
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
@ -29,6 +33,8 @@ CONFIG_SPL_SIZE_LIMIT_SUBTRACT_GD=y
|
||||
CONFIG_SPL_SIZE_LIMIT_SUBTRACT_MALLOC=y
|
||||
CONFIG_SPL_SYS_REPORT_STACK_F_USAGE=y
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x400
|
||||
CONFIG_SPL_SYS_MALLOC_SIMPLE=y
|
||||
CONFIG_SPL_STACK_R=y
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
@ -52,6 +58,7 @@ CONFIG_SPL_YMODEM_SUPPORT=y
|
||||
CONFIG_HUSH_PARSER=y
|
||||
CONFIG_CMD_ASKENV=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_REMOTEPROC=y
|
||||
CONFIG_CMD_USB=y
|
||||
|
@ -30,6 +30,7 @@ CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_LOAD_FIT_ADDRESS=0x81000000
|
||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_PREBOOT="run main_cpsw0_qsgmii_phyinit;"
|
||||
CONFIG_BOOTCOMMAND="run findfdt; run envboot; run init_${boot}; run boot_rprocs; run get_kern_${boot}; run get_fdt_${boot}; run get_overlay_${boot}; run run_kern"
|
||||
CONFIG_LOGLEVEL=7
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
@ -96,6 +97,7 @@ CONFIG_SPL_OF_TRANSLATE=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_CLK_TI_SCI=y
|
||||
CONFIG_CLK_CCF=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DFU_RAM=y
|
||||
CONFIG_DFU_SF=y
|
||||
@ -118,8 +120,8 @@ CONFIG_K3_SEC_PROXY=y
|
||||
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||
CONFIG_MMC_IO_VOLTAGE=y
|
||||
CONFIG_MMC_UHS_SUPPORT=y
|
||||
CONFIG_MMC_HS200_SUPPORT=y
|
||||
CONFIG_SPL_MMC_HS200_SUPPORT=y
|
||||
CONFIG_MMC_HS400_SUPPORT=y
|
||||
CONFIG_SPL_MMC_HS400_SUPPORT=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_ADMA=y
|
||||
CONFIG_SPL_MMC_SDHCI_ADMA=y
|
||||
@ -137,9 +139,15 @@ CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_STMICRO=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_MULTIPLEXER=y
|
||||
CONFIG_MUX_MMIO=y
|
||||
CONFIG_PHY_FIXED=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_TI_AM65_CPSW_NUSS=y
|
||||
CONFIG_PHY=y
|
||||
CONFIG_SPL_PHY=y
|
||||
CONFIG_PHY_CADENCE_TORRENT=y
|
||||
CONFIG_PHY_J721E_WIZ=y
|
||||
CONFIG_PINCTRL=y
|
||||
# CONFIG_PINCTRL_GENERIC is not set
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
|
@ -92,7 +92,7 @@ CONFIG_K3_SEC_PROXY=y
|
||||
CONFIG_FS_LOADER=y
|
||||
CONFIG_K3_AVS0=y
|
||||
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||
CONFIG_SPL_MMC_HS200_SUPPORT=y
|
||||
CONFIG_SPL_MMC_HS400_SUPPORT=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_SPL_MMC_SDHCI_ADMA=y
|
||||
CONFIG_MMC_SDHCI_AM654=y
|
||||
|
@ -135,9 +135,15 @@ CONFIG_SPI_FLASH_STMICRO=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_TI_DP83867=y
|
||||
CONFIG_MULTIPLEXER=y
|
||||
CONFIG_MUX_MMIO=y
|
||||
CONFIG_PHY_FIXED=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_TI_AM65_CPSW_NUSS=y
|
||||
CONFIG_PHY=y
|
||||
CONFIG_SPL_PHY=y
|
||||
CONFIG_PHY_CADENCE_SIERRA=y
|
||||
CONFIG_PHY_J721E_WIZ=y
|
||||
CONFIG_PINCTRL=y
|
||||
# CONFIG_PINCTRL_GENERIC is not set
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
|
@ -113,7 +113,6 @@ CONFIG_SPL_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_TPS65941=y
|
||||
CONFIG_K3_SYSTEM_CONTROLLER=y
|
||||
CONFIG_REMOTEPROC_TI_K3_ARM64=y
|
||||
CONFIG_REMOTEPROC_TI_K3_R5F=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_RESET_TI_SCI=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
|
@ -27,6 +27,7 @@ Board-specific doc
|
||||
socionext/index
|
||||
st/index
|
||||
tbs/index
|
||||
ti/index
|
||||
toradex/index
|
||||
xen/index
|
||||
xilinx/index
|
||||
|
331
doc/board/ti/j721e_evm.rst
Normal file
331
doc/board/ti/j721e_evm.rst
Normal file
@ -0,0 +1,331 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
.. sectionauthor:: Lokesh Vutla <lokeshvutla@ti.com>
|
||||
|
||||
Texas Instruments K3 Platforms
|
||||
==============================
|
||||
|
||||
Introduction:
|
||||
-------------
|
||||
The J721e family of SoCs are part of K3 Multicore SoC architecture platform
|
||||
targeting automotive applications. They are designed as a low power, high
|
||||
performance and highly integrated device architecture, adding significant
|
||||
enhancement on processing power, graphics capability, video and imaging
|
||||
processing, virtualization and coherent memory support.
|
||||
|
||||
The device is partitioned into three functional domains, each containing
|
||||
specific processing cores and peripherals:
|
||||
|
||||
1. Wake-up (WKUP) domain:
|
||||
* Device Management and Security Controller (DMSC)
|
||||
|
||||
2. Microcontroller (MCU) domain:
|
||||
* Dual Core ARM Cortex-R5F processor
|
||||
|
||||
3. MAIN domain:
|
||||
* Dual core 64-bit ARM Cortex-A72
|
||||
* 2 x Dual cortex ARM Cortex-R5 subsystem
|
||||
* 2 x C66x Digital signal processor sub system
|
||||
* C71x Digital signal processor sub-system with MMA.
|
||||
|
||||
More info can be found in TRM: http://www.ti.com/lit/pdf/spruil1
|
||||
|
||||
Boot Flow:
|
||||
----------
|
||||
Boot flow is similar to that of AM65x SoC and extending it with remoteproc
|
||||
support. Below is the pictorial representation of boot flow:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
+------------------------------------------------------------------------+-----------------------+
|
||||
| DMSC | MCU R5 | A72 | MAIN R5/C66x/C7x |
|
||||
+------------------------------------------------------------------------+-----------------------+
|
||||
| +--------+ | | | |
|
||||
| | Reset | | | | |
|
||||
| +--------+ | | | |
|
||||
| : | | | |
|
||||
| +--------+ | +-----------+ | | |
|
||||
| | *ROM* |----------|-->| Reset rls | | | |
|
||||
| +--------+ | +-----------+ | | |
|
||||
| | | | : | | |
|
||||
| | ROM | | : | | |
|
||||
| |services| | : | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | *R5 ROM* | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | |<---------|---|Load and auth| | | |
|
||||
| | | | | tiboot3.bin | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | : | | |
|
||||
| | | | : | | |
|
||||
| | | | : | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | *R5 SPL* | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | Load | | | |
|
||||
| | | | | sysfw.itb | | | |
|
||||
| | Start | | +-------------+ | | |
|
||||
| | System |<---------|---| Start | | | |
|
||||
| |Firmware| | | SYSFW | | | |
|
||||
| +--------+ | +-------------+ | | |
|
||||
| : | | | | | |
|
||||
| +---------+ | | Load | | | |
|
||||
| | *SYSFW* | | | system | | | |
|
||||
| +---------+ | | Config data | | | |
|
||||
| | |<--------|---| | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | DDR | | | |
|
||||
| | | | | config | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | Load | | | |
|
||||
| | | | | tispl.bin | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | Load R5 | | | |
|
||||
| | | | | firmware | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | |<--------|---| Start A72 | | | |
|
||||
| | | | | and jump to | | | |
|
||||
| | | | | DM fw image | | | |
|
||||
| | | | +-------------+ | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |---------|-----------------------|---->| Reset rls | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | TIFS | | | : | |
|
||||
| |Services | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|---->|*ATF/OPTEE*| | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | : | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|---->| *A72 SPL* | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | | Load | | |
|
||||
| | | | | | u-boot.img| | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | : | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|---->| *U-Boot* | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | | prompt | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | | | | | Load R5 | | |
|
||||
| | | | | | Firmware | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|-----| Start R5 | | +-----------+ |
|
||||
| | |---------|-----------------------|-----+-----------+-----|----->| R5 starts | |
|
||||
| | | | | | Load C6 | | +-----------+ |
|
||||
| | | | | | Firmware | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|-----| Start C6 | | +-----------+ |
|
||||
| | |---------|-----------------------|-----+-----------+-----|----->| C6 starts | |
|
||||
| | | | | | Load C7 | | +-----------+ |
|
||||
| | | | | | Firmware | | |
|
||||
| | | | | +-----------+ | |
|
||||
| | |<--------|-----------------------|-----| Start C7 | | +-----------+ |
|
||||
| | |---------|-----------------------|-----+-----------+-----|----->| C7 starts | |
|
||||
| +---------+ | | | +-----------+ |
|
||||
| | | | |
|
||||
+------------------------------------------------------------------------+-----------------------+
|
||||
|
||||
- Here DMSC acts as master and provides all the critical services. R5/A72
|
||||
requests DMSC to get these services done as shown in the above diagram.
|
||||
|
||||
Sources:
|
||||
--------
|
||||
1. SYSFW:
|
||||
Tree: git://git.ti.com/k3-image-gen/k3-image-gen.git
|
||||
Branch: master
|
||||
|
||||
2. ATF:
|
||||
Tree: https://github.com/ARM-software/arm-trusted-firmware.git
|
||||
Branch: master
|
||||
|
||||
3. OPTEE:
|
||||
Tree: https://github.com/OP-TEE/optee_os.git
|
||||
Branch: master
|
||||
|
||||
4. U-Boot:
|
||||
Tree: https://source.denx.de/u-boot/u-boot
|
||||
Branch: master
|
||||
|
||||
Build procedure:
|
||||
----------------
|
||||
1. SYSFW:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
$ make CROSS_COMPILE=arm-linux-gnueabihf-
|
||||
|
||||
2. ATF:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu- ARCH=aarch64 PLAT=k3 TARGET_BOARD=generic SPD=opteed
|
||||
|
||||
3. OPTEE:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
$ make PLATFORM=k3-j721e CFG_ARM64_core=y
|
||||
|
||||
4. U-Boot:
|
||||
|
||||
* 4.1 R5:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
$ make CROSS_COMPILE=arm-linux-gnueabihf- j721e_evm_r5_defconfig O=/tmp/r5
|
||||
$ make CROSS_COMPILE=arm-linux-gnueabihf- O=/tmp/r5
|
||||
|
||||
* 4.2 A72:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu- j721e_evm_a72_defconfig O=/tmp/a72
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu- ATF=<path to ATF dir>/build/k3/generic/release/bl31.bin TEE=<path to OPTEE OS dir>/out/arm-plat-k3/core/tee-pager_v2.bin DM=<path to DM firmware image> O=/tmp/a72
|
||||
|
||||
Target Images
|
||||
--------------
|
||||
Copy the below images to an SD card and boot:
|
||||
- sysfw.itb from step 1
|
||||
- tiboot3.bin from step 4.1
|
||||
- tispl.bin, u-boot.img from 4.2
|
||||
|
||||
Image formats:
|
||||
--------------
|
||||
|
||||
- tiboot3.bin:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
+-----------------------+
|
||||
| X.509 |
|
||||
| Certificate |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | R5 | |
|
||||
| | u-boot-spl.bin | |
|
||||
| | | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | FIT header | |
|
||||
| | +---------------+ | |
|
||||
| | | | | |
|
||||
| | | DTB 1...N | | |
|
||||
| | +---------------+ | |
|
||||
| +-------------------+ |
|
||||
+-----------------------+
|
||||
|
||||
- tispl.bin
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
+-----------------------+
|
||||
| |
|
||||
| FIT HEADER |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | A72 ATF | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | A72 OPTEE | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | R5 DM FW | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | A72 SPL | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | SPL DTB 1...N | |
|
||||
| +-------------------+ |
|
||||
+-----------------------+
|
||||
|
||||
- sysfw.itb
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
+-----------------------+
|
||||
| |
|
||||
| FIT HEADER |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | sysfw.bin | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | board config | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | PM config | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | RM config | |
|
||||
| +-------------------+ |
|
||||
| | | |
|
||||
| | Secure config | |
|
||||
| +-------------------+ |
|
||||
+-----------------------+
|
||||
|
||||
OSPI:
|
||||
-----
|
||||
ROM supports booting from OSPI from offset 0x0.
|
||||
|
||||
Flashing images to OSPI:
|
||||
|
||||
Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img,
|
||||
and sysfw.itb over tftp and then flash those to OSPI at their respective
|
||||
addresses.
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> sf probe
|
||||
=> tftp ${loadaddr} tiboot3.bin
|
||||
=> sf update $loadaddr 0x0 $filesize
|
||||
=> tftp ${loadaddr} tispl.bin
|
||||
=> sf update $loadaddr 0x80000 $filesize
|
||||
=> tftp ${loadaddr} u-boot.img
|
||||
=> sf update $loadaddr 0x280000 $filesize
|
||||
=> tftp ${loadaddr} sysfw.itb
|
||||
=> sf update $loadaddr 0x6C0000 $filesize
|
||||
|
||||
Flash layout for OSPI:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
0x0 +----------------------------+
|
||||
| ospi.tiboot3(512K) |
|
||||
| |
|
||||
0x80000 +----------------------------+
|
||||
| ospi.tispl(2M) |
|
||||
| |
|
||||
0x280000 +----------------------------+
|
||||
| ospi.u-boot(4M) |
|
||||
| |
|
||||
0x680000 +----------------------------+
|
||||
| ospi.env(128K) |
|
||||
| |
|
||||
0x6A0000 +----------------------------+
|
||||
| ospi.env.backup (128K) |
|
||||
| |
|
||||
0x6C0000 +----------------------------+
|
||||
| ospi.sysfw(1M) |
|
||||
| |
|
||||
0x7C0000 +----------------------------+
|
||||
| padding (256k) |
|
||||
0x800000 +----------------------------+
|
||||
| ospi.rootfs(UBIFS) |
|
||||
| |
|
||||
+----------------------------+
|
||||
|
||||
Firmwares:
|
||||
----------
|
||||
|
||||
The J721e u-boot allows firmware to be loaded for the Cortex-R5 subsystem.
|
||||
The CPSW5G in J7200 and CPSW9G in J721E present in MAIN domain is configured
|
||||
and controlled by the ethernet firmware that executes in the MAIN Cortex R5.
|
||||
The default supported environment variables support loading these firmwares
|
||||
from only MMC. "dorprocboot" env variable has to be set for the U-BOOT to load
|
||||
and start the remote cores in the system.
|
||||
|
||||
J721E common processor board can be attached to a Ethernet QSGMII card and the
|
||||
PHY in the card has to be reset before it can be used for data transfer.
|
||||
"do_main_cpsw0_qsgmii_phyinit" env variable has to be set for the U-BOOT to
|
||||
configure this PHY.
|
@ -18,6 +18,19 @@
|
||||
#include <linux/ioport.h>
|
||||
#include <asm/global_data.h>
|
||||
|
||||
bool ofnode_name_eq(ofnode node, const char *name)
|
||||
{
|
||||
const char *node_name;
|
||||
size_t len;
|
||||
|
||||
assert(ofnode_valid(node));
|
||||
|
||||
node_name = ofnode_get_name(node);
|
||||
len = strchrnul(node_name, '@') - node_name;
|
||||
|
||||
return (strlen(name) == len) && !strncmp(node_name, name, len);
|
||||
}
|
||||
|
||||
int ofnode_read_u32(ofnode node, const char *propname, u32 *outp)
|
||||
{
|
||||
return ofnode_read_u32_index(node, propname, 0, outp);
|
||||
|
@ -619,6 +619,7 @@ static int am654_sdhci_of_to_plat(struct udevice *dev)
|
||||
}
|
||||
}
|
||||
|
||||
dev_read_u32(dev, "ti,strobe-sel", &plat->strb_sel);
|
||||
dev_read_u32(dev, "ti,clkbuf-sel", &plat->clkbuf_sel);
|
||||
|
||||
ret = mmc_of_parse(dev, cfg);
|
||||
|
@ -507,6 +507,9 @@ void sdhci_set_uhs_timing(struct sdhci_host *host)
|
||||
case MMC_HS_200:
|
||||
reg |= SDHCI_CTRL_UHS_SDR104;
|
||||
break;
|
||||
case MMC_HS_400:
|
||||
reg |= SDHCI_CTRL_HS400;
|
||||
break;
|
||||
default:
|
||||
reg |= SDHCI_CTRL_UHS_SDR12;
|
||||
}
|
||||
|
@ -282,4 +282,7 @@ config PHY_IMX8MQ_USB
|
||||
Support the USB3.0 PHY in NXP i.MX8MQ SoC
|
||||
|
||||
source "drivers/phy/rockchip/Kconfig"
|
||||
source "drivers/phy/cadence/Kconfig"
|
||||
source "drivers/phy/ti/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
@ -38,3 +38,5 @@ obj-$(CONFIG_MT76X8_USB_PHY) += mt76x8-usb-phy.o
|
||||
obj-$(CONFIG_PHY_DA8XX_USB) += phy-da8xx-usb.o
|
||||
obj-$(CONFIG_PHY_MTK_TPHY) += phy-mtk-tphy.o
|
||||
obj-$(CONFIG_PHY_IMX8MQ_USB) += phy-imx8mq-usb.o
|
||||
obj-y += cadence/
|
||||
obj-y += ti/
|
||||
|
11
drivers/phy/cadence/Kconfig
Normal file
11
drivers/phy/cadence/Kconfig
Normal file
@ -0,0 +1,11 @@
|
||||
config PHY_CADENCE_SIERRA
|
||||
tristate "Cadence Sierra PHY Driver"
|
||||
depends on DM_RESET
|
||||
help
|
||||
Enable this to support the Cadence Sierra PHY driver
|
||||
|
||||
config PHY_CADENCE_TORRENT
|
||||
tristate "Cadence Torrent PHY Driver"
|
||||
depends on DM_RESET
|
||||
help
|
||||
Enable this to support the Cadence Torrent PHY driver
|
2
drivers/phy/cadence/Makefile
Normal file
2
drivers/phy/cadence/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
obj-$(CONFIG_$(SPL_)PHY_CADENCE_SIERRA) += phy-cadence-sierra.o
|
||||
obj-$(CONFIG_$(SPL_)PHY_CADENCE_TORRENT) += phy-cadence-torrent.o
|
751
drivers/phy/cadence/phy-cadence-sierra.c
Normal file
751
drivers/phy/cadence/phy-cadence-sierra.c
Normal file
@ -0,0 +1,751 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Cadence Sierra PHY Driver
|
||||
*
|
||||
* Based on the linux driver provided by Cadence
|
||||
*
|
||||
* Copyright (c) 2018 Cadence Design Systems
|
||||
* Author: Alan Douglas <adouglas@cadence.com>
|
||||
*
|
||||
* Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
|
||||
* Jean-Jacques Hiblot <jjhiblot@ti.com>
|
||||
*
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <clk.h>
|
||||
#include <generic-phy.h>
|
||||
#include <reset.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <dm/device_compat.h>
|
||||
#include <dm/lists.h>
|
||||
#include <dm/read.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <dm/devres.h>
|
||||
#include <linux/io.h>
|
||||
#include <dt-bindings/phy/phy.h>
|
||||
#include <regmap.h>
|
||||
|
||||
/* PHY register offsets */
|
||||
#define SIERRA_COMMON_CDB_OFFSET 0x0
|
||||
#define SIERRA_MACRO_ID_REG 0x0
|
||||
#define SIERRA_CMN_PLLLC_MODE_PREG 0x48
|
||||
#define SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG 0x49
|
||||
#define SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG 0x4A
|
||||
#define SIERRA_CMN_PLLLC_LOCK_CNTSTART_PREG 0x4B
|
||||
#define SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG 0x4F
|
||||
#define SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG 0x50
|
||||
#define SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG 0x62
|
||||
|
||||
#define SIERRA_LANE_CDB_OFFSET(ln, offset) \
|
||||
(0x4000 + ((ln) * (0x800 >> (2 - (offset)))))
|
||||
|
||||
#define SIERRA_DET_STANDEC_A_PREG 0x000
|
||||
#define SIERRA_DET_STANDEC_B_PREG 0x001
|
||||
#define SIERRA_DET_STANDEC_C_PREG 0x002
|
||||
#define SIERRA_DET_STANDEC_D_PREG 0x003
|
||||
#define SIERRA_DET_STANDEC_E_PREG 0x004
|
||||
#define SIERRA_PSM_LANECAL_DLY_A1_RESETS_PREG 0x008
|
||||
#define SIERRA_PSM_A0IN_TMR_PREG 0x009
|
||||
#define SIERRA_PSM_DIAG_PREG 0x015
|
||||
#define SIERRA_PSC_TX_A0_PREG 0x028
|
||||
#define SIERRA_PSC_TX_A1_PREG 0x029
|
||||
#define SIERRA_PSC_TX_A2_PREG 0x02A
|
||||
#define SIERRA_PSC_TX_A3_PREG 0x02B
|
||||
#define SIERRA_PSC_RX_A0_PREG 0x030
|
||||
#define SIERRA_PSC_RX_A1_PREG 0x031
|
||||
#define SIERRA_PSC_RX_A2_PREG 0x032
|
||||
#define SIERRA_PSC_RX_A3_PREG 0x033
|
||||
#define SIERRA_PLLCTRL_SUBRATE_PREG 0x03A
|
||||
#define SIERRA_PLLCTRL_GEN_D_PREG 0x03E
|
||||
#define SIERRA_PLLCTRL_CPGAIN_MODE_PREG 0x03F
|
||||
#define SIERRA_PLLCTRL_STATUS_PREG 0x044
|
||||
#define SIERRA_CLKPATH_BIASTRIM_PREG 0x04B
|
||||
#define SIERRA_DFE_BIASTRIM_PREG 0x04C
|
||||
#define SIERRA_DRVCTRL_ATTEN_PREG 0x06A
|
||||
#define SIERRA_CLKPATHCTRL_TMR_PREG 0x081
|
||||
#define SIERRA_RX_CREQ_FLTR_A_MODE3_PREG 0x085
|
||||
#define SIERRA_RX_CREQ_FLTR_A_MODE2_PREG 0x086
|
||||
#define SIERRA_RX_CREQ_FLTR_A_MODE1_PREG 0x087
|
||||
#define SIERRA_RX_CREQ_FLTR_A_MODE0_PREG 0x088
|
||||
#define SIERRA_CREQ_CCLKDET_MODE01_PREG 0x08E
|
||||
#define SIERRA_RX_CTLE_MAINTENANCE_PREG 0x091
|
||||
#define SIERRA_CREQ_FSMCLK_SEL_PREG 0x092
|
||||
#define SIERRA_CREQ_EQ_CTRL_PREG 0x093
|
||||
#define SIERRA_CREQ_SPARE_PREG 0x096
|
||||
#define SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG 0x097
|
||||
#define SIERRA_CTLELUT_CTRL_PREG 0x098
|
||||
#define SIERRA_DFE_ECMP_RATESEL_PREG 0x0C0
|
||||
#define SIERRA_DFE_SMP_RATESEL_PREG 0x0C1
|
||||
#define SIERRA_DEQ_PHALIGN_CTRL 0x0C4
|
||||
#define SIERRA_DEQ_CONCUR_CTRL1_PREG 0x0C8
|
||||
#define SIERRA_DEQ_CONCUR_CTRL2_PREG 0x0C9
|
||||
#define SIERRA_DEQ_EPIPWR_CTRL2_PREG 0x0CD
|
||||
#define SIERRA_DEQ_FAST_MAINT_CYCLES_PREG 0x0CE
|
||||
#define SIERRA_DEQ_ERRCMP_CTRL_PREG 0x0D0
|
||||
#define SIERRA_DEQ_OFFSET_CTRL_PREG 0x0D8
|
||||
#define SIERRA_DEQ_GAIN_CTRL_PREG 0x0E0
|
||||
#define SIERRA_DEQ_VGATUNE_CTRL_PREG 0x0E1
|
||||
#define SIERRA_DEQ_GLUT0 0x0E8
|
||||
#define SIERRA_DEQ_GLUT1 0x0E9
|
||||
#define SIERRA_DEQ_GLUT2 0x0EA
|
||||
#define SIERRA_DEQ_GLUT3 0x0EB
|
||||
#define SIERRA_DEQ_GLUT4 0x0EC
|
||||
#define SIERRA_DEQ_GLUT5 0x0ED
|
||||
#define SIERRA_DEQ_GLUT6 0x0EE
|
||||
#define SIERRA_DEQ_GLUT7 0x0EF
|
||||
#define SIERRA_DEQ_GLUT8 0x0F0
|
||||
#define SIERRA_DEQ_GLUT9 0x0F1
|
||||
#define SIERRA_DEQ_GLUT10 0x0F2
|
||||
#define SIERRA_DEQ_GLUT11 0x0F3
|
||||
#define SIERRA_DEQ_GLUT12 0x0F4
|
||||
#define SIERRA_DEQ_GLUT13 0x0F5
|
||||
#define SIERRA_DEQ_GLUT14 0x0F6
|
||||
#define SIERRA_DEQ_GLUT15 0x0F7
|
||||
#define SIERRA_DEQ_GLUT16 0x0F8
|
||||
#define SIERRA_DEQ_ALUT0 0x108
|
||||
#define SIERRA_DEQ_ALUT1 0x109
|
||||
#define SIERRA_DEQ_ALUT2 0x10A
|
||||
#define SIERRA_DEQ_ALUT3 0x10B
|
||||
#define SIERRA_DEQ_ALUT4 0x10C
|
||||
#define SIERRA_DEQ_ALUT5 0x10D
|
||||
#define SIERRA_DEQ_ALUT6 0x10E
|
||||
#define SIERRA_DEQ_ALUT7 0x10F
|
||||
#define SIERRA_DEQ_ALUT8 0x110
|
||||
#define SIERRA_DEQ_ALUT9 0x111
|
||||
#define SIERRA_DEQ_ALUT10 0x112
|
||||
#define SIERRA_DEQ_ALUT11 0x113
|
||||
#define SIERRA_DEQ_ALUT12 0x114
|
||||
#define SIERRA_DEQ_ALUT13 0x115
|
||||
#define SIERRA_DEQ_DFETAP_CTRL_PREG 0x128
|
||||
#define SIERRA_DFE_EN_1010_IGNORE_PREG 0x134
|
||||
#define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG 0x150
|
||||
#define SIERRA_DEQ_TAU_CTRL2_PREG 0x151
|
||||
#define SIERRA_DEQ_PICTRL_PREG 0x161
|
||||
#define SIERRA_CPICAL_TMRVAL_MODE1_PREG 0x170
|
||||
#define SIERRA_CPICAL_TMRVAL_MODE0_PREG 0x171
|
||||
#define SIERRA_CPICAL_PICNT_MODE1_PREG 0x174
|
||||
#define SIERRA_CPI_OUTBUF_RATESEL_PREG 0x17C
|
||||
#define SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG 0x183
|
||||
#define SIERRA_LFPSDET_SUPPORT_PREG 0x188
|
||||
#define SIERRA_LFPSFILT_NS_PREG 0x18A
|
||||
#define SIERRA_LFPSFILT_RD_PREG 0x18B
|
||||
#define SIERRA_LFPSFILT_MP_PREG 0x18C
|
||||
#define SIERRA_SIGDET_SUPPORT_PREG 0x190
|
||||
#define SIERRA_SDFILT_H2L_A_PREG 0x191
|
||||
#define SIERRA_SDFILT_L2H_PREG 0x193
|
||||
#define SIERRA_RXBUFFER_CTLECTRL_PREG 0x19E
|
||||
#define SIERRA_RXBUFFER_RCDFECTRL_PREG 0x19F
|
||||
#define SIERRA_RXBUFFER_DFECTRL_PREG 0x1A0
|
||||
#define SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG 0x14F
|
||||
#define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG 0x150
|
||||
|
||||
#define SIERRA_PHY_CONFIG_CTRL_OFFSET 0xc000
|
||||
#define SIERRA_PHY_PLL_CFG 0xe
|
||||
|
||||
#define SIERRA_MACRO_ID 0x00007364
|
||||
#define SIERRA_MAX_LANES 16
|
||||
#define PLL_LOCK_TIME 100
|
||||
|
||||
static const struct reg_field macro_id_type =
|
||||
REG_FIELD(SIERRA_MACRO_ID_REG, 0, 15);
|
||||
static const struct reg_field phy_pll_cfg_1 =
|
||||
REG_FIELD(SIERRA_PHY_PLL_CFG, 1, 1);
|
||||
static const struct reg_field pllctrl_lock =
|
||||
REG_FIELD(SIERRA_PLLCTRL_STATUS_PREG, 0, 0);
|
||||
|
||||
#define reset_control_assert(rst) cdns_reset_assert(rst)
|
||||
#define reset_control_deassert(rst) cdns_reset_deassert(rst)
|
||||
#define reset_control reset_ctl
|
||||
|
||||
struct cdns_sierra_inst {
|
||||
u32 phy_type;
|
||||
u32 num_lanes;
|
||||
u32 mlane;
|
||||
struct reset_ctl_bulk *lnk_rst;
|
||||
};
|
||||
|
||||
struct cdns_reg_pairs {
|
||||
u16 val;
|
||||
u32 off;
|
||||
};
|
||||
|
||||
struct cdns_sierra_data {
|
||||
u32 id_value;
|
||||
u8 block_offset_shift;
|
||||
u8 reg_offset_shift;
|
||||
u32 pcie_cmn_regs;
|
||||
u32 pcie_ln_regs;
|
||||
u32 usb_cmn_regs;
|
||||
u32 usb_ln_regs;
|
||||
struct cdns_reg_pairs *pcie_cmn_vals;
|
||||
struct cdns_reg_pairs *pcie_ln_vals;
|
||||
struct cdns_reg_pairs *usb_cmn_vals;
|
||||
struct cdns_reg_pairs *usb_ln_vals;
|
||||
};
|
||||
|
||||
struct cdns_regmap_cdb_context {
|
||||
struct udevice *dev;
|
||||
void __iomem *base;
|
||||
u8 reg_offset_shift;
|
||||
};
|
||||
|
||||
struct cdns_sierra_phy {
|
||||
struct udevice *dev;
|
||||
void *base;
|
||||
size_t size;
|
||||
struct regmap *regmap;
|
||||
struct cdns_sierra_data *init_data;
|
||||
struct cdns_sierra_inst phys[SIERRA_MAX_LANES];
|
||||
struct reset_control *phy_rst;
|
||||
struct regmap *regmap_lane_cdb[SIERRA_MAX_LANES];
|
||||
struct regmap *regmap_phy_config_ctrl;
|
||||
struct regmap *regmap_common_cdb;
|
||||
struct regmap_field *macro_id_type;
|
||||
struct regmap_field *phy_pll_cfg_1;
|
||||
struct regmap_field *pllctrl_lock[SIERRA_MAX_LANES];
|
||||
struct clk *clk;
|
||||
struct clk *cmn_refclk;
|
||||
struct clk *cmn_refclk1;
|
||||
int nsubnodes;
|
||||
u32 num_lanes;
|
||||
bool autoconf;
|
||||
};
|
||||
|
||||
static inline int cdns_reset_assert(struct reset_control *rst)
|
||||
{
|
||||
if (rst)
|
||||
return reset_assert(rst);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int cdns_reset_deassert(struct reset_control *rst)
|
||||
{
|
||||
if (rst)
|
||||
return reset_deassert(rst);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct cdns_sierra_inst *phy_get_drvdata(struct phy *phy)
|
||||
{
|
||||
struct cdns_sierra_phy *sp = dev_get_priv(phy->dev);
|
||||
int index;
|
||||
|
||||
if (phy->id >= SIERRA_MAX_LANES)
|
||||
return NULL;
|
||||
|
||||
for (index = 0; index < sp->nsubnodes; index++) {
|
||||
if (phy->id == sp->phys[index].mlane)
|
||||
return &sp->phys[index];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int cdns_sierra_phy_init(struct phy *gphy)
|
||||
{
|
||||
struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
|
||||
struct cdns_sierra_phy *phy = dev_get_priv(gphy->dev);
|
||||
struct regmap *regmap = phy->regmap;
|
||||
int i, j;
|
||||
struct cdns_reg_pairs *cmn_vals, *ln_vals;
|
||||
u32 num_cmn_regs, num_ln_regs;
|
||||
|
||||
/* Initialise the PHY registers, unless auto configured */
|
||||
if (phy->autoconf)
|
||||
return 0;
|
||||
|
||||
clk_set_rate(phy->cmn_refclk, 25000000);
|
||||
clk_set_rate(phy->cmn_refclk1, 25000000);
|
||||
|
||||
if (ins->phy_type == PHY_TYPE_PCIE) {
|
||||
num_cmn_regs = phy->init_data->pcie_cmn_regs;
|
||||
num_ln_regs = phy->init_data->pcie_ln_regs;
|
||||
cmn_vals = phy->init_data->pcie_cmn_vals;
|
||||
ln_vals = phy->init_data->pcie_ln_vals;
|
||||
} else if (ins->phy_type == PHY_TYPE_USB3) {
|
||||
num_cmn_regs = phy->init_data->usb_cmn_regs;
|
||||
num_ln_regs = phy->init_data->usb_ln_regs;
|
||||
cmn_vals = phy->init_data->usb_cmn_vals;
|
||||
ln_vals = phy->init_data->usb_ln_vals;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
regmap = phy->regmap_common_cdb;
|
||||
for (j = 0; j < num_cmn_regs ; j++)
|
||||
regmap_write(regmap, cmn_vals[j].off, cmn_vals[j].val);
|
||||
|
||||
for (i = 0; i < ins->num_lanes; i++) {
|
||||
for (j = 0; j < num_ln_regs ; j++) {
|
||||
regmap = phy->regmap_lane_cdb[i + ins->mlane];
|
||||
regmap_write(regmap, ln_vals[j].off, ln_vals[j].val);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cdns_sierra_phy_on(struct phy *gphy)
|
||||
{
|
||||
struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
|
||||
struct cdns_sierra_phy *sp = dev_get_priv(gphy->dev);
|
||||
struct udevice *dev = gphy->dev;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
/* Take the PHY lane group out of reset */
|
||||
ret = reset_deassert_bulk(ins->lnk_rst);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to take the PHY lane out of reset\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = regmap_field_read_poll_timeout(sp->pllctrl_lock[ins->mlane],
|
||||
val, val, 1000, PLL_LOCK_TIME);
|
||||
if (ret < 0)
|
||||
dev_err(dev, "PLL lock of lane failed\n");
|
||||
|
||||
reset_control_assert(sp->phy_rst);
|
||||
reset_control_deassert(sp->phy_rst);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cdns_sierra_phy_off(struct phy *gphy)
|
||||
{
|
||||
struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
|
||||
|
||||
return reset_assert_bulk(ins->lnk_rst);
|
||||
}
|
||||
|
||||
static int cdns_sierra_phy_reset(struct phy *gphy)
|
||||
{
|
||||
struct cdns_sierra_phy *sp = dev_get_priv(gphy->dev);
|
||||
|
||||
reset_control_assert(sp->phy_rst);
|
||||
reset_control_deassert(sp->phy_rst);
|
||||
return 0;
|
||||
};
|
||||
|
||||
static const struct phy_ops ops = {
|
||||
.init = cdns_sierra_phy_init,
|
||||
.power_on = cdns_sierra_phy_on,
|
||||
.power_off = cdns_sierra_phy_off,
|
||||
.reset = cdns_sierra_phy_reset,
|
||||
};
|
||||
|
||||
static int cdns_sierra_get_optional(struct cdns_sierra_inst *inst,
|
||||
ofnode child)
|
||||
{
|
||||
if (ofnode_read_u32(child, "reg", &inst->mlane))
|
||||
return -EINVAL;
|
||||
|
||||
if (ofnode_read_u32(child, "cdns,num-lanes", &inst->num_lanes))
|
||||
return -EINVAL;
|
||||
|
||||
if (ofnode_read_u32(child, "cdns,phy-type", &inst->phy_type))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct regmap *cdns_regmap_init(struct udevice *dev, void __iomem *base,
|
||||
u32 block_offset, u8 block_offset_shift,
|
||||
u8 reg_offset_shift)
|
||||
{
|
||||
struct cdns_sierra_phy *sp = dev_get_priv(dev);
|
||||
struct regmap_config config;
|
||||
|
||||
config.r_start = (ulong)(base + (block_offset << block_offset_shift));
|
||||
config.r_size = sp->size - (block_offset << block_offset_shift);
|
||||
config.reg_offset_shift = reg_offset_shift;
|
||||
config.width = REGMAP_SIZE_16;
|
||||
|
||||
return devm_regmap_init(dev, NULL, NULL, &config);
|
||||
}
|
||||
|
||||
static int cdns_regfield_init(struct cdns_sierra_phy *sp)
|
||||
{
|
||||
struct udevice *dev = sp->dev;
|
||||
struct regmap_field *field;
|
||||
struct regmap *regmap;
|
||||
int i;
|
||||
|
||||
regmap = sp->regmap_common_cdb;
|
||||
field = devm_regmap_field_alloc(dev, regmap, macro_id_type);
|
||||
if (IS_ERR(field)) {
|
||||
dev_err(dev, "MACRO_ID_TYPE reg field init failed\n");
|
||||
return PTR_ERR(field);
|
||||
}
|
||||
sp->macro_id_type = field;
|
||||
|
||||
regmap = sp->regmap_phy_config_ctrl;
|
||||
field = devm_regmap_field_alloc(dev, regmap, phy_pll_cfg_1);
|
||||
if (IS_ERR(field)) {
|
||||
dev_err(dev, "PHY_PLL_CFG_1 reg field init failed\n");
|
||||
return PTR_ERR(field);
|
||||
}
|
||||
sp->phy_pll_cfg_1 = field;
|
||||
|
||||
for (i = 0; i < SIERRA_MAX_LANES; i++) {
|
||||
regmap = sp->regmap_lane_cdb[i];
|
||||
field = devm_regmap_field_alloc(dev, regmap, pllctrl_lock);
|
||||
if (IS_ERR(field)) {
|
||||
dev_err(dev, "P%d_ENABLE reg field init failed\n", i);
|
||||
return PTR_ERR(field);
|
||||
}
|
||||
sp->pllctrl_lock[i] = field;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cdns_regmap_init_blocks(struct cdns_sierra_phy *sp,
|
||||
void __iomem *base, u8 block_offset_shift,
|
||||
u8 reg_offset_shift)
|
||||
{
|
||||
struct udevice *dev = sp->dev;
|
||||
struct regmap *regmap;
|
||||
u32 block_offset;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < SIERRA_MAX_LANES; i++) {
|
||||
block_offset = SIERRA_LANE_CDB_OFFSET(i, reg_offset_shift);
|
||||
regmap = cdns_regmap_init(dev, base, block_offset,
|
||||
block_offset_shift, reg_offset_shift);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(dev, "Failed to init lane CDB regmap\n");
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
sp->regmap_lane_cdb[i] = regmap;
|
||||
}
|
||||
|
||||
regmap = cdns_regmap_init(dev, base, SIERRA_COMMON_CDB_OFFSET,
|
||||
block_offset_shift, reg_offset_shift);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(dev, "Failed to init common CDB regmap\n");
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
sp->regmap_common_cdb = regmap;
|
||||
|
||||
regmap = cdns_regmap_init(dev, base, SIERRA_PHY_CONFIG_CTRL_OFFSET,
|
||||
block_offset_shift, reg_offset_shift);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(dev, "Failed to init PHY config and control regmap\n");
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
sp->regmap_phy_config_ctrl = regmap;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cdns_sierra_phy_probe(struct udevice *dev)
|
||||
{
|
||||
struct cdns_sierra_phy *sp = dev_get_priv(dev);
|
||||
struct cdns_sierra_data *data;
|
||||
unsigned int id_value;
|
||||
int ret, node = 0;
|
||||
struct clk *clk;
|
||||
ofnode child;
|
||||
|
||||
sp->dev = dev;
|
||||
|
||||
sp->base = devfdt_remap_addr_index(dev, 0);
|
||||
if (!sp->base) {
|
||||
dev_err(dev, "unable to map regs\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
devfdt_get_addr_size_index(dev, 0, (fdt_size_t *)&sp->size);
|
||||
|
||||
/* Get init data for this PHY */
|
||||
data = (struct cdns_sierra_data *)dev_get_driver_data(dev);
|
||||
sp->init_data = data;
|
||||
|
||||
ret = cdns_regmap_init_blocks(sp, sp->base, data->block_offset_shift,
|
||||
data->reg_offset_shift);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = cdns_regfield_init(sp);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
sp->clk = devm_clk_get_optional(dev, "phy_clk");
|
||||
if (IS_ERR(sp->clk)) {
|
||||
dev_err(dev, "failed to get clock phy_clk\n");
|
||||
return PTR_ERR(sp->clk);
|
||||
}
|
||||
|
||||
sp->phy_rst = devm_reset_control_get(dev, "sierra_reset");
|
||||
if (IS_ERR(sp->phy_rst)) {
|
||||
dev_err(dev, "failed to get reset\n");
|
||||
return PTR_ERR(sp->phy_rst);
|
||||
}
|
||||
|
||||
clk = devm_clk_get_optional(dev, "cmn_refclk_dig_div");
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(dev, "cmn_refclk clock not found\n");
|
||||
ret = PTR_ERR(clk);
|
||||
return ret;
|
||||
}
|
||||
sp->cmn_refclk = clk;
|
||||
|
||||
clk = devm_clk_get_optional(dev, "cmn_refclk1_dig_div");
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(dev, "cmn_refclk1 clock not found\n");
|
||||
ret = PTR_ERR(clk);
|
||||
return ret;
|
||||
}
|
||||
sp->cmn_refclk1 = clk;
|
||||
|
||||
ret = clk_prepare_enable(sp->clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Check that PHY is present */
|
||||
regmap_field_read(sp->macro_id_type, &id_value);
|
||||
if (sp->init_data->id_value != id_value) {
|
||||
dev_err(dev, "PHY not found 0x%x vs 0x%x\n",
|
||||
sp->init_data->id_value, id_value);
|
||||
ret = -EINVAL;
|
||||
goto clk_disable;
|
||||
}
|
||||
|
||||
sp->autoconf = dev_read_bool(dev, "cdns,autoconf");
|
||||
|
||||
ofnode_for_each_subnode(child, dev_ofnode(dev)) {
|
||||
sp->phys[node].lnk_rst = devm_reset_bulk_get_by_node(dev,
|
||||
child);
|
||||
if (IS_ERR(sp->phys[node].lnk_rst)) {
|
||||
ret = PTR_ERR(sp->phys[node].lnk_rst);
|
||||
dev_err(dev, "failed to get reset %s\n",
|
||||
ofnode_get_name(child));
|
||||
goto put_child2;
|
||||
}
|
||||
|
||||
if (!sp->autoconf) {
|
||||
ret = cdns_sierra_get_optional(&sp->phys[node], child);
|
||||
if (ret) {
|
||||
dev_err(dev, "missing property in node %s\n",
|
||||
ofnode_get_name(child));
|
||||
goto put_child;
|
||||
}
|
||||
}
|
||||
sp->num_lanes += sp->phys[node].num_lanes;
|
||||
|
||||
node++;
|
||||
}
|
||||
sp->nsubnodes = node;
|
||||
|
||||
/* If more than one subnode, configure the PHY as multilink */
|
||||
if (!sp->autoconf && sp->nsubnodes > 1)
|
||||
regmap_field_write(sp->phy_pll_cfg_1, 0x1);
|
||||
|
||||
reset_control_deassert(sp->phy_rst);
|
||||
dev_info(dev, "sierra probed\n");
|
||||
return 0;
|
||||
|
||||
put_child:
|
||||
node++;
|
||||
put_child2:
|
||||
|
||||
clk_disable:
|
||||
clk_disable_unprepare(sp->clk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cdns_sierra_phy_remove(struct udevice *dev)
|
||||
{
|
||||
struct cdns_sierra_phy *phy = dev_get_priv(dev);
|
||||
int i;
|
||||
|
||||
reset_control_assert(phy->phy_rst);
|
||||
|
||||
/*
|
||||
* The device level resets will be put automatically.
|
||||
* Need to put the subnode resets here though.
|
||||
*/
|
||||
for (i = 0; i < phy->nsubnodes; i++)
|
||||
reset_assert_bulk(phy->phys[i].lnk_rst);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* refclk100MHz_32b_PCIe_cmn_pll_ext_ssc */
|
||||
static struct cdns_reg_pairs cdns_pcie_cmn_regs_ext_ssc[] = {
|
||||
{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
|
||||
{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
|
||||
{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
|
||||
{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
|
||||
{0x1B1B, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
|
||||
};
|
||||
|
||||
/* refclk100MHz_32b_PCIe_ln_ext_ssc */
|
||||
static struct cdns_reg_pairs cdns_pcie_ln_regs_ext_ssc[] = {
|
||||
{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
|
||||
{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
|
||||
{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
|
||||
{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
|
||||
{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
|
||||
{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
|
||||
{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG}
|
||||
};
|
||||
|
||||
/* refclk100MHz_20b_USB_cmn_pll_ext_ssc */
|
||||
static struct cdns_reg_pairs cdns_usb_cmn_regs_ext_ssc[] = {
|
||||
{0x2085, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
|
||||
{0x2085, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
|
||||
{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
|
||||
{0x0000, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
|
||||
};
|
||||
|
||||
/* refclk100MHz_20b_USB_ln_ext_ssc */
|
||||
static struct cdns_reg_pairs cdns_usb_ln_regs_ext_ssc[] = {
|
||||
{0xFE0A, SIERRA_DET_STANDEC_A_PREG},
|
||||
{0x000F, SIERRA_DET_STANDEC_B_PREG},
|
||||
{0x00A5, SIERRA_DET_STANDEC_C_PREG},
|
||||
{0x69ad, SIERRA_DET_STANDEC_D_PREG},
|
||||
{0x0241, SIERRA_DET_STANDEC_E_PREG},
|
||||
{0x0010, SIERRA_PSM_LANECAL_DLY_A1_RESETS_PREG},
|
||||
{0x0014, SIERRA_PSM_A0IN_TMR_PREG},
|
||||
{0xCF00, SIERRA_PSM_DIAG_PREG},
|
||||
{0x001F, SIERRA_PSC_TX_A0_PREG},
|
||||
{0x0007, SIERRA_PSC_TX_A1_PREG},
|
||||
{0x0003, SIERRA_PSC_TX_A2_PREG},
|
||||
{0x0003, SIERRA_PSC_TX_A3_PREG},
|
||||
{0x0FFF, SIERRA_PSC_RX_A0_PREG},
|
||||
{0x0619, SIERRA_PSC_RX_A1_PREG},
|
||||
{0x0003, SIERRA_PSC_RX_A2_PREG},
|
||||
{0x0001, SIERRA_PSC_RX_A3_PREG},
|
||||
{0x0001, SIERRA_PLLCTRL_SUBRATE_PREG},
|
||||
{0x0406, SIERRA_PLLCTRL_GEN_D_PREG},
|
||||
{0x5233, SIERRA_PLLCTRL_CPGAIN_MODE_PREG},
|
||||
{0x00CA, SIERRA_CLKPATH_BIASTRIM_PREG},
|
||||
{0x2512, SIERRA_DFE_BIASTRIM_PREG},
|
||||
{0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
|
||||
{0x873E, SIERRA_CLKPATHCTRL_TMR_PREG},
|
||||
{0x03CF, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
|
||||
{0x01CE, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
|
||||
{0x7B3C, SIERRA_CREQ_CCLKDET_MODE01_PREG},
|
||||
{0x033F, SIERRA_RX_CTLE_MAINTENANCE_PREG},
|
||||
{0x3232, SIERRA_CREQ_FSMCLK_SEL_PREG},
|
||||
{0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
|
||||
{0x8000, SIERRA_CREQ_SPARE_PREG},
|
||||
{0xCC44, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
|
||||
{0x8453, SIERRA_CTLELUT_CTRL_PREG},
|
||||
{0x4110, SIERRA_DFE_ECMP_RATESEL_PREG},
|
||||
{0x4110, SIERRA_DFE_SMP_RATESEL_PREG},
|
||||
{0x0002, SIERRA_DEQ_PHALIGN_CTRL},
|
||||
{0x3200, SIERRA_DEQ_CONCUR_CTRL1_PREG},
|
||||
{0x5064, SIERRA_DEQ_CONCUR_CTRL2_PREG},
|
||||
{0x0030, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
|
||||
{0x0048, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
|
||||
{0x5A5A, SIERRA_DEQ_ERRCMP_CTRL_PREG},
|
||||
{0x02F5, SIERRA_DEQ_OFFSET_CTRL_PREG},
|
||||
{0x02F5, SIERRA_DEQ_GAIN_CTRL_PREG},
|
||||
{0x9A8A, SIERRA_DEQ_VGATUNE_CTRL_PREG},
|
||||
{0x0014, SIERRA_DEQ_GLUT0},
|
||||
{0x0014, SIERRA_DEQ_GLUT1},
|
||||
{0x0014, SIERRA_DEQ_GLUT2},
|
||||
{0x0014, SIERRA_DEQ_GLUT3},
|
||||
{0x0014, SIERRA_DEQ_GLUT4},
|
||||
{0x0014, SIERRA_DEQ_GLUT5},
|
||||
{0x0014, SIERRA_DEQ_GLUT6},
|
||||
{0x0014, SIERRA_DEQ_GLUT7},
|
||||
{0x0014, SIERRA_DEQ_GLUT8},
|
||||
{0x0014, SIERRA_DEQ_GLUT9},
|
||||
{0x0014, SIERRA_DEQ_GLUT10},
|
||||
{0x0014, SIERRA_DEQ_GLUT11},
|
||||
{0x0014, SIERRA_DEQ_GLUT12},
|
||||
{0x0014, SIERRA_DEQ_GLUT13},
|
||||
{0x0014, SIERRA_DEQ_GLUT14},
|
||||
{0x0014, SIERRA_DEQ_GLUT15},
|
||||
{0x0014, SIERRA_DEQ_GLUT16},
|
||||
{0x0BAE, SIERRA_DEQ_ALUT0},
|
||||
{0x0AEB, SIERRA_DEQ_ALUT1},
|
||||
{0x0A28, SIERRA_DEQ_ALUT2},
|
||||
{0x0965, SIERRA_DEQ_ALUT3},
|
||||
{0x08A2, SIERRA_DEQ_ALUT4},
|
||||
{0x07DF, SIERRA_DEQ_ALUT5},
|
||||
{0x071C, SIERRA_DEQ_ALUT6},
|
||||
{0x0659, SIERRA_DEQ_ALUT7},
|
||||
{0x0596, SIERRA_DEQ_ALUT8},
|
||||
{0x0514, SIERRA_DEQ_ALUT9},
|
||||
{0x0492, SIERRA_DEQ_ALUT10},
|
||||
{0x0410, SIERRA_DEQ_ALUT11},
|
||||
{0x038E, SIERRA_DEQ_ALUT12},
|
||||
{0x030C, SIERRA_DEQ_ALUT13},
|
||||
{0x03F4, SIERRA_DEQ_DFETAP_CTRL_PREG},
|
||||
{0x0001, SIERRA_DFE_EN_1010_IGNORE_PREG},
|
||||
{0x3C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
|
||||
{0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||
{0x1C08, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||
{0x0033, SIERRA_DEQ_PICTRL_PREG},
|
||||
{0x0400, SIERRA_CPICAL_TMRVAL_MODE1_PREG},
|
||||
{0x0330, SIERRA_CPICAL_TMRVAL_MODE0_PREG},
|
||||
{0x01FF, SIERRA_CPICAL_PICNT_MODE1_PREG},
|
||||
{0x0009, SIERRA_CPI_OUTBUF_RATESEL_PREG},
|
||||
{0x3232, SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG},
|
||||
{0x0005, SIERRA_LFPSDET_SUPPORT_PREG},
|
||||
{0x000F, SIERRA_LFPSFILT_NS_PREG},
|
||||
{0x0009, SIERRA_LFPSFILT_RD_PREG},
|
||||
{0x0001, SIERRA_LFPSFILT_MP_PREG},
|
||||
{0x8013, SIERRA_SDFILT_H2L_A_PREG},
|
||||
{0x8009, SIERRA_SDFILT_L2H_PREG},
|
||||
{0x0024, SIERRA_RXBUFFER_CTLECTRL_PREG},
|
||||
{0x0020, SIERRA_RXBUFFER_RCDFECTRL_PREG},
|
||||
{0x4243, SIERRA_RXBUFFER_DFECTRL_PREG}
|
||||
};
|
||||
|
||||
static const struct cdns_sierra_data cdns_map_sierra = {
|
||||
SIERRA_MACRO_ID,
|
||||
0x2,
|
||||
0x2,
|
||||
ARRAY_SIZE(cdns_pcie_cmn_regs_ext_ssc),
|
||||
ARRAY_SIZE(cdns_pcie_ln_regs_ext_ssc),
|
||||
ARRAY_SIZE(cdns_usb_cmn_regs_ext_ssc),
|
||||
ARRAY_SIZE(cdns_usb_ln_regs_ext_ssc),
|
||||
cdns_pcie_cmn_regs_ext_ssc,
|
||||
cdns_pcie_ln_regs_ext_ssc,
|
||||
cdns_usb_cmn_regs_ext_ssc,
|
||||
cdns_usb_ln_regs_ext_ssc,
|
||||
};
|
||||
|
||||
static const struct cdns_sierra_data cdns_ti_map_sierra = {
|
||||
SIERRA_MACRO_ID,
|
||||
0x0,
|
||||
0x1,
|
||||
ARRAY_SIZE(cdns_pcie_cmn_regs_ext_ssc),
|
||||
ARRAY_SIZE(cdns_pcie_ln_regs_ext_ssc),
|
||||
ARRAY_SIZE(cdns_usb_cmn_regs_ext_ssc),
|
||||
ARRAY_SIZE(cdns_usb_ln_regs_ext_ssc),
|
||||
cdns_pcie_cmn_regs_ext_ssc,
|
||||
cdns_pcie_ln_regs_ext_ssc,
|
||||
cdns_usb_cmn_regs_ext_ssc,
|
||||
cdns_usb_ln_regs_ext_ssc,
|
||||
};
|
||||
|
||||
static const struct udevice_id cdns_sierra_id_table[] = {
|
||||
{
|
||||
.compatible = "cdns,sierra-phy-t0",
|
||||
.data = (ulong)&cdns_map_sierra,
|
||||
},
|
||||
{
|
||||
.compatible = "ti,sierra-phy-t0",
|
||||
.data = (ulong)&cdns_ti_map_sierra,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(sierra_phy_provider) = {
|
||||
.name = "cdns,sierra",
|
||||
.id = UCLASS_PHY,
|
||||
.of_match = cdns_sierra_id_table,
|
||||
.probe = cdns_sierra_phy_probe,
|
||||
.remove = cdns_sierra_phy_remove,
|
||||
.ops = &ops,
|
||||
.priv_auto = sizeof(struct cdns_sierra_phy),
|
||||
};
|
2463
drivers/phy/cadence/phy-cadence-torrent.c
Normal file
2463
drivers/phy/cadence/phy-cadence-torrent.c
Normal file
File diff suppressed because it is too large
Load Diff
9
drivers/phy/ti/Kconfig
Normal file
9
drivers/phy/ti/Kconfig
Normal file
@ -0,0 +1,9 @@
|
||||
config PHY_J721E_WIZ
|
||||
tristate "TI J721E WIZ (SERDES Wrapper) support"
|
||||
depends on ARCH_K3
|
||||
help
|
||||
This option enables support for WIZ module present in TI's J721E
|
||||
SoC. WIZ is a serdes wrapper used to configure some of the input
|
||||
signals to the SERDES (Sierra/Torrent). This driver configures
|
||||
three clock selects (pll0, pll1, dig) and resets for each of the
|
||||
lanes.
|
1
drivers/phy/ti/Makefile
Normal file
1
drivers/phy/ti/Makefile
Normal file
@ -0,0 +1 @@
|
||||
obj-$(CONFIG_$(SPL_)PHY_J721E_WIZ) += phy-j721e-wiz.o
|
1156
drivers/phy/ti/phy-j721e-wiz.c
Normal file
1156
drivers/phy/ti/phy-j721e-wiz.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -115,10 +115,4 @@
|
||||
|
||||
#define CONFIG_SYS_USB_FAT_BOOT_PARTITION 1
|
||||
|
||||
/* MMC ENV related defines */
|
||||
#ifdef CONFIG_ENV_IS_IN_MMC
|
||||
#define CONFIG_SYS_MMC_ENV_DEV 0
|
||||
#define CONFIG_SYS_MMC_ENV_PART 1
|
||||
#endif
|
||||
|
||||
#endif /* __CONFIG_AM642_EVM_H */
|
||||
|
@ -82,8 +82,6 @@
|
||||
#ifdef CONFIG_SYS_K3_SPL_ATF
|
||||
#if defined(CONFIG_TARGET_J721E_R5_EVM)
|
||||
#define EXTRA_ENV_R5_SPL_RPROC_FW_ARGS_MMC \
|
||||
"addr_mainr5f0_0load=0x88000000\0" \
|
||||
"name_mainr5f0_0fw=/lib/firmware/j7-main-r5f0_0-fw\0" \
|
||||
"addr_mcur5f0_0load=0x89000000\0" \
|
||||
"name_mcur5f0_0fw=/lib/firmware/j7-mcu-r5f0_0-fw\0"
|
||||
#elif defined(CONFIG_TARGET_J7200_R5_EVM)
|
||||
@ -129,6 +127,7 @@
|
||||
|
||||
#ifdef CONFIG_TARGET_J721E_A72_EVM
|
||||
#define DEFAULT_RPROCS "" \
|
||||
"2 /lib/firmware/j7-main-r5f0_0-fw " \
|
||||
"3 /lib/firmware/j7-main-r5f0_1-fw " \
|
||||
"4 /lib/firmware/j7-main-r5f1_0-fw " \
|
||||
"5 /lib/firmware/j7-main-r5f1_1-fw " \
|
||||
@ -138,11 +137,24 @@
|
||||
#endif /* CONFIG_TARGET_J721E_A72_EVM */
|
||||
|
||||
#ifdef CONFIG_TARGET_J7200_A72_EVM
|
||||
#define EXTRA_ENV_CONFIG_MAIN_CPSW0_QSGMII_PHY \
|
||||
"do_main_cpsw0_qsgmii_phyinit=1\0" \
|
||||
"init_main_cpsw0_qsgmii_phy=gpio set gpio@22_17;" \
|
||||
"gpio clear gpio@22_16\0" \
|
||||
"main_cpsw0_qsgmii_phyinit=" \
|
||||
"if test ${do_main_cpsw0_qsgmii_phyinit} -eq 1 && test ${dorprocboot} -eq 1 && " \
|
||||
"test ${boot} = mmc; then " \
|
||||
"run init_main_cpsw0_qsgmii_phy;" \
|
||||
"fi;\0"
|
||||
#define DEFAULT_RPROCS "" \
|
||||
"2 /lib/firmware/j7200-main-r5f0_0-fw " \
|
||||
"3 /lib/firmware/j7200-main-r5f0_1-fw "
|
||||
#endif /* CONFIG_TARGET_J7200_A72_EVM */
|
||||
|
||||
#ifndef EXTRA_ENV_CONFIG_MAIN_CPSW0_QSGMII_PHY
|
||||
#define EXTRA_ENV_CONFIG_MAIN_CPSW0_QSGMII_PHY
|
||||
#endif
|
||||
|
||||
/* set default dfu_bufsiz to 128KB (sector size of OSPI) */
|
||||
#define EXTRA_ENV_DFUARGS \
|
||||
"dfu_bufsiz=0x20000\0" \
|
||||
@ -190,6 +202,7 @@
|
||||
EXTRA_ENV_DFUARGS \
|
||||
DEFAULT_UFS_TI_ARGS \
|
||||
EXTRA_ENV_J721E_BOARD_SETTINGS_MTD \
|
||||
EXTRA_ENV_CONFIG_MAIN_CPSW0_QSGMII_PHY \
|
||||
BOOTENV
|
||||
|
||||
/* Now for the remaining common defines */
|
||||
|
@ -231,6 +231,16 @@ static inline ofnode ofnode_root(void)
|
||||
return node;
|
||||
}
|
||||
|
||||
/**
|
||||
* ofnode_name_eq() - Check if the node name is equivalent to a given name
|
||||
* ignoring the unit address
|
||||
*
|
||||
* @node: valid node reference that has to be compared
|
||||
* @name: name that has to be compared with the node name
|
||||
* @return true if matches, false if it doesn't match
|
||||
*/
|
||||
bool ofnode_name_eq(ofnode node, const char *name);
|
||||
|
||||
/**
|
||||
* ofnode_read_u32() - Read a 32-bit integer from a property
|
||||
*
|
||||
|
@ -90,4 +90,9 @@
|
||||
#define J7200_SERDES0_LANE3_USB 0x2
|
||||
#define J7200_SERDES0_LANE3_IP4_UNUSED 0x3
|
||||
|
||||
/* AM64 */
|
||||
|
||||
#define AM64_SERDES0_LANE0_PCIE0 0x0
|
||||
#define AM64_SERDES0_LANE0_USB 0x1
|
||||
|
||||
#endif /* _DT_BINDINGS_MUX_TI_SERDES */
|
||||
|
20
include/dt-bindings/phy/phy-cadence.h
Normal file
20
include/dt-bindings/phy/phy-cadence.h
Normal file
@ -0,0 +1,20 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* This header provides constants for Cadence SERDES.
|
||||
*/
|
||||
|
||||
#ifndef _DT_BINDINGS_CADENCE_SERDES_H
|
||||
#define _DT_BINDINGS_CADENCE_SERDES_H
|
||||
|
||||
/* Torrent */
|
||||
#define TORRENT_SERDES_NO_SSC 0
|
||||
#define TORRENT_SERDES_EXTERNAL_SSC 1
|
||||
#define TORRENT_SERDES_INTERNAL_SSC 2
|
||||
|
||||
#define CDNS_TORRENT_REFCLK_DRIVER 0
|
||||
|
||||
/* Sierra */
|
||||
#define CDNS_SIERRA_PLL_CMNLC 0
|
||||
#define CDNS_SIERRA_PLL_CMNLC1 1
|
||||
|
||||
#endif /* _DT_BINDINGS_CADENCE_SERDES_H */
|
21
include/dt-bindings/phy/phy-ti.h
Normal file
21
include/dt-bindings/phy/phy-ti.h
Normal file
@ -0,0 +1,21 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* This header provides constants for TI SERDES.
|
||||
*/
|
||||
|
||||
#ifndef _DT_BINDINGS_TI_SERDES
|
||||
#define _DT_BINDINGS_TI_SERDES
|
||||
|
||||
/* Clock index for output clocks from WIZ */
|
||||
|
||||
/* MUX Clocks */
|
||||
#define TI_WIZ_PLL0_REFCLK 0
|
||||
#define TI_WIZ_PLL1_REFCLK 1
|
||||
#define TI_WIZ_REFCLK_DIG 2
|
||||
|
||||
/* Reserve index here for future additions */
|
||||
|
||||
/* MISC Clocks */
|
||||
#define TI_WIZ_PHY_EN_REFCLK 16
|
||||
|
||||
#endif /* _DT_BINDINGS_TI_SERDES */
|
@ -19,5 +19,6 @@
|
||||
#define PHY_TYPE_DP 6
|
||||
#define PHY_TYPE_XPCS 7
|
||||
#define PHY_TYPE_SGMII 8
|
||||
#define PHY_TYPE_QSGMII 9
|
||||
|
||||
#endif /* _DT_BINDINGS_PHY */
|
||||
|
@ -1,3 +1,4 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* This header provides constants specific to AM33XX pinctrl bindings.
|
||||
*/
|
||||
@ -39,5 +40,133 @@
|
||||
#undef PIN_OFF_INPUT_PULLDOWN
|
||||
#undef PIN_OFF_WAKEUPENABLE
|
||||
|
||||
#endif
|
||||
#define AM335X_PIN_OFFSET_MIN 0x0800U
|
||||
|
||||
#define AM335X_PIN_GPMC_AD0 0x800
|
||||
#define AM335X_PIN_GPMC_AD1 0x804
|
||||
#define AM335X_PIN_GPMC_AD2 0x808
|
||||
#define AM335X_PIN_GPMC_AD3 0x80c
|
||||
#define AM335X_PIN_GPMC_AD4 0x810
|
||||
#define AM335X_PIN_GPMC_AD5 0x814
|
||||
#define AM335X_PIN_GPMC_AD6 0x818
|
||||
#define AM335X_PIN_GPMC_AD7 0x81c
|
||||
#define AM335X_PIN_GPMC_AD8 0x820
|
||||
#define AM335X_PIN_GPMC_AD9 0x824
|
||||
#define AM335X_PIN_GPMC_AD10 0x828
|
||||
#define AM335X_PIN_GPMC_AD11 0x82c
|
||||
#define AM335X_PIN_GPMC_AD12 0x830
|
||||
#define AM335X_PIN_GPMC_AD13 0x834
|
||||
#define AM335X_PIN_GPMC_AD14 0x838
|
||||
#define AM335X_PIN_GPMC_AD15 0x83c
|
||||
#define AM335X_PIN_GPMC_A0 0x840
|
||||
#define AM335X_PIN_GPMC_A1 0x844
|
||||
#define AM335X_PIN_GPMC_A2 0x848
|
||||
#define AM335X_PIN_GPMC_A3 0x84c
|
||||
#define AM335X_PIN_GPMC_A4 0x850
|
||||
#define AM335X_PIN_GPMC_A5 0x854
|
||||
#define AM335X_PIN_GPMC_A6 0x858
|
||||
#define AM335X_PIN_GPMC_A7 0x85c
|
||||
#define AM335X_PIN_GPMC_A8 0x860
|
||||
#define AM335X_PIN_GPMC_A9 0x864
|
||||
#define AM335X_PIN_GPMC_A10 0x868
|
||||
#define AM335X_PIN_GPMC_A11 0x86c
|
||||
#define AM335X_PIN_GPMC_WAIT0 0x870
|
||||
#define AM335X_PIN_GPMC_WPN 0x874
|
||||
#define AM335X_PIN_GPMC_BEN1 0x878
|
||||
#define AM335X_PIN_GPMC_CSN0 0x87c
|
||||
#define AM335X_PIN_GPMC_CSN1 0x880
|
||||
#define AM335X_PIN_GPMC_CSN2 0x884
|
||||
#define AM335X_PIN_GPMC_CSN3 0x888
|
||||
#define AM335X_PIN_GPMC_CLK 0x88c
|
||||
#define AM335X_PIN_GPMC_ADVN_ALE 0x890
|
||||
#define AM335X_PIN_GPMC_OEN_REN 0x894
|
||||
#define AM335X_PIN_GPMC_WEN 0x898
|
||||
#define AM335X_PIN_GPMC_BEN0_CLE 0x89c
|
||||
#define AM335X_PIN_LCD_DATA0 0x8a0
|
||||
#define AM335X_PIN_LCD_DATA1 0x8a4
|
||||
#define AM335X_PIN_LCD_DATA2 0x8a8
|
||||
#define AM335X_PIN_LCD_DATA3 0x8ac
|
||||
#define AM335X_PIN_LCD_DATA4 0x8b0
|
||||
#define AM335X_PIN_LCD_DATA5 0x8b4
|
||||
#define AM335X_PIN_LCD_DATA6 0x8b8
|
||||
#define AM335X_PIN_LCD_DATA7 0x8bc
|
||||
#define AM335X_PIN_LCD_DATA8 0x8c0
|
||||
#define AM335X_PIN_LCD_DATA9 0x8c4
|
||||
#define AM335X_PIN_LCD_DATA10 0x8c8
|
||||
#define AM335X_PIN_LCD_DATA11 0x8cc
|
||||
#define AM335X_PIN_LCD_DATA12 0x8d0
|
||||
#define AM335X_PIN_LCD_DATA13 0x8d4
|
||||
#define AM335X_PIN_LCD_DATA14 0x8d8
|
||||
#define AM335X_PIN_LCD_DATA15 0x8dc
|
||||
#define AM335X_PIN_LCD_VSYNC 0x8e0
|
||||
#define AM335X_PIN_LCD_HSYNC 0x8e4
|
||||
#define AM335X_PIN_LCD_PCLK 0x8e8
|
||||
#define AM335X_PIN_LCD_AC_BIAS_EN 0x8ec
|
||||
#define AM335X_PIN_MMC0_DAT3 0x8f0
|
||||
#define AM335X_PIN_MMC0_DAT2 0x8f4
|
||||
#define AM335X_PIN_MMC0_DAT1 0x8f8
|
||||
#define AM335X_PIN_MMC0_DAT0 0x8fc
|
||||
#define AM335X_PIN_MMC0_CLK 0x900
|
||||
#define AM335X_PIN_MMC0_CMD 0x904
|
||||
#define AM335X_PIN_MII1_COL 0x908
|
||||
#define AM335X_PIN_MII1_CRS 0x90c
|
||||
#define AM335X_PIN_MII1_RX_ER 0x910
|
||||
#define AM335X_PIN_MII1_TX_EN 0x914
|
||||
#define AM335X_PIN_MII1_RX_DV 0x918
|
||||
#define AM335X_PIN_MII1_TXD3 0x91c
|
||||
#define AM335X_PIN_MII1_TXD2 0x920
|
||||
#define AM335X_PIN_MII1_TXD1 0x924
|
||||
#define AM335X_PIN_MII1_TXD0 0x928
|
||||
#define AM335X_PIN_MII1_TX_CLK 0x92c
|
||||
#define AM335X_PIN_MII1_RX_CLK 0x930
|
||||
#define AM335X_PIN_MII1_RXD3 0x934
|
||||
#define AM335X_PIN_MII1_RXD2 0x938
|
||||
#define AM335X_PIN_MII1_RXD1 0x93c
|
||||
#define AM335X_PIN_MII1_RXD0 0x940
|
||||
#define AM335X_PIN_RMII1_REF_CLK 0x944
|
||||
#define AM335X_PIN_MDIO 0x948
|
||||
#define AM335X_PIN_MDC 0x94c
|
||||
#define AM335X_PIN_SPI0_SCLK 0x950
|
||||
#define AM335X_PIN_SPI0_D0 0x954
|
||||
#define AM335X_PIN_SPI0_D1 0x958
|
||||
#define AM335X_PIN_SPI0_CS0 0x95c
|
||||
#define AM335X_PIN_SPI0_CS1 0x960
|
||||
#define AM335X_PIN_ECAP0_IN_PWM0_OUT 0x964
|
||||
#define AM335X_PIN_UART0_CTSN 0x968
|
||||
#define AM335X_PIN_UART0_RTSN 0x96c
|
||||
#define AM335X_PIN_UART0_RXD 0x970
|
||||
#define AM335X_PIN_UART0_TXD 0x974
|
||||
#define AM335X_PIN_UART1_CTSN 0x978
|
||||
#define AM335X_PIN_UART1_RTSN 0x97c
|
||||
#define AM335X_PIN_UART1_RXD 0x980
|
||||
#define AM335X_PIN_UART1_TXD 0x984
|
||||
#define AM335X_PIN_I2C0_SDA 0x988
|
||||
#define AM335X_PIN_I2C0_SCL 0x98c
|
||||
#define AM335X_PIN_MCASP0_ACLKX 0x990
|
||||
#define AM335X_PIN_MCASP0_FSX 0x994
|
||||
#define AM335X_PIN_MCASP0_AXR0 0x998
|
||||
#define AM335X_PIN_MCASP0_AHCLKR 0x99c
|
||||
#define AM335X_PIN_MCASP0_ACLKR 0x9a0
|
||||
#define AM335X_PIN_MCASP0_FSR 0x9a4
|
||||
#define AM335X_PIN_MCASP0_AXR1 0x9a8
|
||||
#define AM335X_PIN_MCASP0_AHCLKX 0x9ac
|
||||
#define AM335X_PIN_XDMA_EVENT_INTR0 0x9b0
|
||||
#define AM335X_PIN_XDMA_EVENT_INTR1 0x9b4
|
||||
#define AM335X_PIN_WARMRSTN 0x9b8
|
||||
#define AM335X_PIN_NNMI 0x9c0
|
||||
#define AM335X_PIN_TMS 0x9d0
|
||||
#define AM335X_PIN_TDI 0x9d4
|
||||
#define AM335X_PIN_TDO 0x9d8
|
||||
#define AM335X_PIN_TCK 0x9dc
|
||||
#define AM335X_PIN_TRSTN 0x9e0
|
||||
#define AM335X_PIN_EMU0 0x9e4
|
||||
#define AM335X_PIN_EMU1 0x9e8
|
||||
#define AM335X_PIN_RTC_PWRONRSTN 0x9f8
|
||||
#define AM335X_PIN_PMIC_POWER_EN 0x9fc
|
||||
#define AM335X_PIN_EXT_WAKEUP 0xa00
|
||||
#define AM335X_PIN_USB0_DRVVBUS 0xa1c
|
||||
#define AM335X_PIN_USB1_DRVVBUS 0xa34
|
||||
|
||||
#define AM335X_PIN_OFFSET_MAX 0x0a34U
|
||||
|
||||
#endif
|
||||
|
@ -24,7 +24,7 @@
|
||||
#define PULL_UP (1 << 4)
|
||||
#define ALTELECTRICALSEL (1 << 5)
|
||||
|
||||
/* 34xx specific mux bit defines */
|
||||
/* omap3/4/5 specific mux bit defines */
|
||||
#define INPUT_EN (1 << 8)
|
||||
#define OFF_EN (1 << 9)
|
||||
#define OFFOUT_EN (1 << 10)
|
||||
@ -32,8 +32,6 @@
|
||||
#define OFF_PULL_EN (1 << 12)
|
||||
#define OFF_PULL_UP (1 << 13)
|
||||
#define WAKEUP_EN (1 << 14)
|
||||
|
||||
/* 44xx specific mux bit defines */
|
||||
#define WAKEUP_EVENT (1 << 15)
|
||||
|
||||
/* Active pin states */
|
||||
@ -48,8 +46,8 @@
|
||||
#define PIN_OFF_NONE 0
|
||||
#define PIN_OFF_OUTPUT_HIGH (OFF_EN | OFFOUT_EN | OFFOUT_VAL)
|
||||
#define PIN_OFF_OUTPUT_LOW (OFF_EN | OFFOUT_EN)
|
||||
#define PIN_OFF_INPUT_PULLUP (OFF_EN | OFF_PULL_EN | OFF_PULL_UP)
|
||||
#define PIN_OFF_INPUT_PULLDOWN (OFF_EN | OFF_PULL_EN)
|
||||
#define PIN_OFF_INPUT_PULLUP (OFF_EN | OFFOUT_EN | OFF_PULL_EN | OFF_PULL_UP)
|
||||
#define PIN_OFF_INPUT_PULLDOWN (OFF_EN | OFFOUT_EN | OFF_PULL_EN)
|
||||
#define PIN_OFF_WAKEUPENABLE WAKEUP_EN
|
||||
|
||||
/*
|
||||
@ -66,7 +64,8 @@
|
||||
#define OMAP3_WKUP_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x2a00) (val)
|
||||
#define DM814X_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
|
||||
#define DM816X_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
|
||||
#define AM33XX_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
|
||||
#define AM33XX_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val) (0)
|
||||
#define AM33XX_PADCONF(pa, conf, mux) OMAP_IOPAD_OFFSET((pa), 0x0800) (conf) (mux)
|
||||
|
||||
/*
|
||||
* Macros to allow using the offset from the padconf physical address
|
||||
|
@ -177,6 +177,20 @@ static int dm_test_autobind_uclass_pdata_alloc(struct unit_test_state *uts)
|
||||
}
|
||||
DM_TEST(dm_test_autobind_uclass_pdata_alloc, UT_TESTF_SCAN_PDATA);
|
||||
|
||||
/* compare node names ignoring the unit address */
|
||||
static int dm_test_compare_node_name(struct unit_test_state *uts)
|
||||
{
|
||||
ofnode node;
|
||||
|
||||
node = ofnode_path("/mmio-bus@0");
|
||||
ut_assert(ofnode_valid(node));
|
||||
ut_assert(ofnode_name_eq(node, "mmio-bus"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DM_TEST(dm_test_compare_node_name, UT_TESTF_SCAN_PDATA);
|
||||
|
||||
/* Test that binding with uclass plat setting occurs correctly */
|
||||
static int dm_test_autobind_uclass_pdata_valid(struct unit_test_state *uts)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user