Merge branch '2020-01-22-master-imports'

- Re-add U8500 platform support
- Add bcm968360bg support
- Assorted Keymile fixes
- Other assorted bugfixes
This commit is contained in:
Tom Rini 2020-01-23 16:28:17 -05:00
commit 2c871f9e08
71 changed files with 3255 additions and 244 deletions

View file

@ -403,6 +403,14 @@ F: arch/arm/mach-keystone/
F: arch/arm/include/asm/arch-omap*/
F: arch/arm/include/asm/ti-common/
ARM U8500
M: Stephan Gerhold <stephan@gerhold.net>
R: Linus Walleij <linus.walleij@linaro.org>
S: Maintained
F: arch/arm/dts/ste-*
F: arch/arm/mach-u8500/
F: drivers/timer/nomadik-mtu-timer.c
ARM UNIPHIER
M: Masahiro Yamada <yamada.masahiro@socionext.com>
S: Maintained
@ -781,6 +789,15 @@ F: arch/riscv/
F: cmd/riscv/
F: tools/prelink-riscv.c
RNG
M: Sughosh Ganu <sughosh.ganu@linaro.org>
R: Heinrich Schuchardt <xypron.glpk@gmx.de>
S: Maintained
F: cmd/rng.c
F: drivers/rng/
F: drivers/virtio/virtio_rng.c
F: include/rng.h
ROCKUSB
M: Eddie Cai <eddie.cai.linux@gmail.com>
S: Maintained

View file

@ -1932,7 +1932,7 @@ CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h tools/version.h \
boot* u-boot* MLO* SPL System.map fit-dtb.blob* \
u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log \
lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* \
idbloader.img
idbloader.img flash.bin flash.log
# Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config include/generated spl tpl \

View file

@ -633,6 +633,12 @@ config ARCH_BCM63158
select OF_CONTROL
imply CMD_DM
config ARCH_BCM68360
bool "Broadcom BCM68360 family"
select DM
select OF_CONTROL
imply CMD_DM
config ARCH_BCM6858
bool "Broadcom BCM6858 family"
select DM
@ -1009,6 +1015,24 @@ config ARCH_SUNXI
imply SPL_SERIAL_SUPPORT
imply USB_GADGET
config ARCH_U8500
bool "ST-Ericsson U8500 Series"
select CPU_V7A
select DM
select DM_GPIO
select DM_MMC if MMC
select DM_SERIAL
select DM_USB if USB
select OF_CONTROL
select SYSRESET
select TIMER
imply ARM_PL180_MMCI
imply DM_RTC
imply NOMADIK_MTU_TIMER
imply PL01X_SERIAL
imply RTC_PL031
imply SYSRESET_SYSCON
config ARCH_VERSAL
bool "Support Xilinx Versal Platform"
select ARM64
@ -1779,6 +1803,8 @@ source "arch/arm/mach-sunxi/Kconfig"
source "arch/arm/mach-tegra/Kconfig"
source "arch/arm/mach-u8500/Kconfig"
source "arch/arm/mach-uniphier/Kconfig"
source "arch/arm/cpu/armv7/vf610/Kconfig"
@ -1808,6 +1834,7 @@ source "board/armltd/vexpress64/Kconfig"
source "board/broadcom/bcm23550_w1d/Kconfig"
source "board/broadcom/bcm28155_ap/Kconfig"
source "board/broadcom/bcm963158/Kconfig"
source "board/broadcom/bcm968360bg/Kconfig"
source "board/broadcom/bcm968580xref/Kconfig"
source "board/broadcom/bcmcygnus/Kconfig"
source "board/broadcom/bcmnsp/Kconfig"

View file

@ -79,6 +79,7 @@ machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip
machine-$(CONFIG_STM32) += stm32
machine-$(CONFIG_ARCH_STM32MP) += stm32mp
machine-$(CONFIG_TEGRA) += tegra
machine-$(CONFIG_ARCH_U8500) += u8500
machine-$(CONFIG_ARCH_UNIPHIER) += uniphier
machine-$(CONFIG_ARCH_ZYNQ) += zynq
machine-$(CONFIG_ARCH_ZYNQMP) += zynqmp

View file

@ -389,6 +389,8 @@ dtb-$(CONFIG_FSL_LSCH2) += fsl-ls1043a-qds-duart.dtb \
dtb-$(CONFIG_TARGET_DRAGONBOARD410C) += dragonboard410c.dtb
dtb-$(CONFIG_TARGET_DRAGONBOARD820C) += dragonboard820c.dtb
dtb-$(CONFIG_TARGET_STEMMY) += ste-ux500-samsung-stemmy.dtb
dtb-$(CONFIG_STM32F4) += stm32f429-disco.dtb \
stm32429i-eval.dtb \
stm32f469-disco.dtb
@ -857,6 +859,9 @@ dtb-$(CONFIG_ARCH_BCM283X) += \
dtb-$(CONFIG_ARCH_BCM63158) += \
bcm963158.dtb
dtb-$(CONFIG_ARCH_BCM68360) += \
bcm968360bg.dtb
dtb-$(CONFIG_ARCH_BCM6858) += \
bcm968580xref.dtb

217
arch/arm/dts/bcm68360.dtsi Normal file
View file

@ -0,0 +1,217 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2020 Philippe Reynes <philippe.reynes@softathome.com>
*/
#include "skeleton64.dtsi"
/ {
compatible = "brcm,bcm68360";
#address-cells = <2>;
#size-cells = <2>;
aliases {
spi0 = &hsspi;
};
cpus {
#address-cells = <2>;
#size-cells = <0>;
u-boot,dm-pre-reloc;
cpu0: cpu@0 {
compatible = "arm,cortex-a53", "arm,armv8";
device_type = "cpu";
reg = <0x0 0x0>;
next-level-cache = <&l2>;
u-boot,dm-pre-reloc;
};
cpu1: cpu@1 {
compatible = "arm,cortex-a53", "arm,armv8";
device_type = "cpu";
reg = <0x0 0x1>;
next-level-cache = <&l2>;
u-boot,dm-pre-reloc;
};
l2: l2-cache0 {
compatible = "cache";
u-boot,dm-pre-reloc;
};
};
clocks {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
u-boot,dm-pre-reloc;
periph_osc: periph-osc {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <200000000>;
u-boot,dm-pre-reloc;
};
hsspi_pll: hsspi-pll {
compatible = "fixed-factor-clock";
#clock-cells = <0>;
clocks = <&periph_osc>;
clock-mult = <2>;
clock-div = <1>;
};
refclk50mhz: refclk50mhz {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <50000000>;
};
};
ubus {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
u-boot,dm-pre-reloc;
wdt1: watchdog@ff800480 {
compatible = "brcm,bcm6345-wdt";
reg = <0x0 0xff800480 0x0 0x14>;
clocks = <&refclk50mhz>;
};
wdt2: watchdog@ff8004c0 {
compatible = "brcm,bcm6345-wdt";
reg = <0x0 0xff8004c0 0x0 0x14>;
clocks = <&refclk50mhz>;
};
wdt-reboot {
compatible = "wdt-reboot";
wdt = <&wdt1>;
};
uart0: serial@ff800640 {
compatible = "brcm,bcm6345-uart";
reg = <0x0 0xff800640 0x0 0x18>;
clocks = <&periph_osc>;
status = "disabled";
};
leds: led-controller@ff800800 {
compatible = "brcm,bcm6858-leds";
reg = <0x0 0xff800800 0x0 0xe4>;
status = "disabled";
};
gpio0: gpio-controller@0xff800500 {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff800500 0x0 0x4>,
<0x0 0xff800520 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio1: gpio-controller@0xff800504 {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff800504 0x0 0x4>,
<0x0 0xff800524 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio2: gpio-controller@0xff800508 {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff800508 0x0 0x4>,
<0x0 0xff800528 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio3: gpio-controller@0xff80050c {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff80050c 0x0 0x4>,
<0x0 0xff80052c 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio4: gpio-controller@0xff800510 {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff800510 0x0 0x4>,
<0x0 0xff800530 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio5: gpio-controller@0xff800514 {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff800514 0x0 0x4>,
<0x0 0xff800534 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio6: gpio-controller@0xff800518 {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff800518 0x0 0x4>,
<0x0 0xff800538 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
gpio7: gpio-controller@0xff80051c {
compatible = "brcm,bcm6345-gpio";
reg = <0x0 0xff80051c 0x0 0x4>,
<0x0 0xff80053c 0x0 0x4>;
gpio-controller;
#gpio-cells = <2>;
status = "disabled";
};
hsspi: spi-controller@ff801000 {
compatible = "brcm,bcm6328-hsspi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x0 0xff801000 0x0 0x600>;
clocks = <&hsspi_pll>, <&hsspi_pll>;
clock-names = "hsspi", "pll";
spi-max-frequency = <100000000>;
num-cs = <8>;
status = "disabled";
};
nand: nand-controller@ff801800 {
compatible = "brcm,nand-bcm68360",
"brcm,brcmnand-v5.0",
"brcm,brcmnand";
reg-names = "nand", "nand-int-base", "nand-cache";
reg = <0x0 0xff801800 0x0 0x180>,
<0x0 0xff802000 0x0 0x10>,
<0x0 0xff801c00 0x0 0x200>;
parameter-page-big-endian = <0>;
status = "disabled";
};
};
};

View file

@ -0,0 +1,168 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2020 Philippe Reynes <philippe.reynes@softathome.com>
*/
/dts-v1/;
#include "bcm68360.dtsi"
/ {
model = "Broadcom bcm68360bg";
compatible = "broadcom,bcm68360bg", "brcm,bcm68360";
aliases {
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory {
device_type = "memory";
reg = <0x0 0x0 0x0 0x20000000>;
};
};
&uart0 {
u-boot,dm-pre-reloc;
status = "okay";
};
&gpio0 {
status = "okay";
};
&gpio1 {
status = "okay";
};
&gpio2 {
status = "okay";
};
&gpio3 {
status = "okay";
};
&gpio4 {
status = "okay";
};
&gpio5 {
status = "okay";
};
&gpio6 {
status = "okay";
};
&gpio7 {
status = "okay";
};
&nand {
status = "okay";
write-protect = <0>;
#address-cells = <1>;
#size-cells = <0>;
nandcs@0 {
compatible = "brcm,nandcs";
reg = <0>;
nand-ecc-strength = <4>;
nand-ecc-step-size = <512>;
brcm,nand-oob-sector-size = <16>;
};
};
&leds {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
brcm,serial-led-en-pol;
brcm,serial-led-data-ppol;
led@0 {
reg = <0>;
label = "red:alarm";
};
led@1 {
reg = <1>;
label = "green:wan";
};
led@2 {
reg = <2>;
label = "green:wps";
};
led@12 {
reg = <12>;
label = "orange:enet5.1";
};
led@13 {
reg = <13>;
label = "green:enet5.2";
};
led@14 {
reg = <14>;
label = "orange:enet5.2";
};
led@15 {
reg = <15>;
label = "green:enet5.1";
};
led@16 {
reg = <16>;
label = "green:usb1";
};
led@17 {
reg = <17>;
label = "green:voip1";
};
led@18 {
reg = <18>;
label = "green:voip2";
};
led@19 {
reg = <19>;
label = "green:enet6";
};
led@20 {
reg = <20>;
label = "orange:enet6";
};
led@21 {
reg = <21>;
label = "green:inet";
};
led@22 {
reg = <22>;
label = "green:usb2";
};
};
&hsspi {
status = "okay";
flash: mt25@0 {
compatible = "jedec,spi-nor";
#address-cells = <1>;
#size-cells = <1>;
reg = <0>;
spi-max-frequency = <25000000>;
};
};

View file

@ -0,0 +1,328 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright 2012 Linaro Ltd
*/
#include <dt-bindings/clock/ste-ab8500.h>
/ {
/* Essential housekeeping hardware monitors */
iio-hwmon {
compatible = "iio-hwmon";
io-channels = <&gpadc 0x02>, /* Battery temperature */
<&gpadc 0x03>, /* Main charger voltage */
<&gpadc 0x08>, /* Main battery voltage */
<&gpadc 0x09>, /* VBUS */
<&gpadc 0x0a>, /* Main charger current */
<&gpadc 0x0b>, /* USB charger current */
<&gpadc 0x0c>, /* Backup battery voltage */
<&gpadc 0x0d>, /* Die temperature */
<&gpadc 0x12>; /* Crystal temperature */
};
soc {
prcmu@80157000 {
ab8500 {
compatible = "stericsson,ab8500";
interrupt-parent = <&intc>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
interrupt-controller;
#interrupt-cells = <2>;
ab8500_clock: clock-controller {
compatible = "stericsson,ab8500-clk";
#clock-cells = <1>;
};
ab8500_gpio: ab8500-gpio {
compatible = "stericsson,ab8500-gpio";
gpio-controller;
#gpio-cells = <2>;
};
ab8500-rtc {
compatible = "stericsson,ab8500-rtc";
interrupts = <17 IRQ_TYPE_LEVEL_HIGH
18 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "60S", "ALARM";
};
gpadc: ab8500-gpadc {
compatible = "stericsson,ab8500-gpadc";
interrupts = <32 IRQ_TYPE_LEVEL_HIGH
39 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "HW_CONV_END", "SW_CONV_END";
vddadc-supply = <&ab8500_ldo_tvout_reg>;
#address-cells = <1>;
#size-cells = <0>;
#io-channel-cells = <1>;
/* GPADC channels */
bat_ctrl: channel@01 {
reg = <0x01>;
};
btemp_ball: channel@02 {
reg = <0x02>;
};
main_charger_v: channel@03 {
reg = <0x03>;
};
acc_detect1: channel@04 {
reg = <0x04>;
};
acc_detect2: channel@05 {
reg = <0x05>;
};
adc_aux1: channel@06 {
reg = <0x06>;
};
adc_aux2: channel@07 {
reg = <0x07>;
};
main_batt_v: channel@08 {
reg = <0x08>;
};
vbus_v: channel@09 {
reg = <0x09>;
};
main_charger_c: channel@0a {
reg = <0x0a>;
};
usb_charger_c: channel@0b {
reg = <0x0b>;
};
bk_bat_v: channel@0c {
reg = <0x0c>;
};
die_temp: channel@0d {
reg = <0x0d>;
};
usb_id: channel@0e {
reg = <0x0e>;
};
xtal_temp: channel@12 {
reg = <0x12>;
};
vbat_true_meas: channel@13 {
reg = <0x13>;
};
bat_ctrl_and_ibat: channel@1c {
reg = <0x1c>;
};
vbat_meas_and_ibat: channel@1d {
reg = <0x1d>;
};
vbat_true_meas_and_ibat: channel@1e {
reg = <0x1e>;
};
bat_temp_and_ibat: channel@1f {
reg = <0x1f>;
};
};
ab8500_temp {
compatible = "stericsson,abx500-temp";
io-channels = <&gpadc 0x06>,
<&gpadc 0x07>;
io-channel-name = "aux1", "aux2";
};
ab8500_battery: ab8500_battery {
stericsson,battery-type = "LIPO";
thermistor-on-batctrl;
};
ab8500_fg {
compatible = "stericsson,ab8500-fg";
battery = <&ab8500_battery>;
io-channels = <&gpadc 0x08>;
io-channel-name = "main_bat_v";
};
ab8500_btemp {
compatible = "stericsson,ab8500-btemp";
battery = <&ab8500_battery>;
io-channels = <&gpadc 0x02>,
<&gpadc 0x01>;
io-channel-name = "btemp_ball",
"bat_ctrl";
};
ab8500_charger {
compatible = "stericsson,ab8500-charger";
battery = <&ab8500_battery>;
vddadc-supply = <&ab8500_ldo_tvout_reg>;
io-channels = <&gpadc 0x03>,
<&gpadc 0x0a>,
<&gpadc 0x09>,
<&gpadc 0x0b>;
io-channel-name = "main_charger_v",
"main_charger_c",
"vbus_v",
"usb_charger_c";
};
ab8500_chargalg {
compatible = "stericsson,ab8500-chargalg";
battery = <&ab8500_battery>;
};
ab8500_usb {
compatible = "stericsson,ab8500-usb";
interrupts = < 90 IRQ_TYPE_LEVEL_HIGH
96 IRQ_TYPE_LEVEL_HIGH
14 IRQ_TYPE_LEVEL_HIGH
15 IRQ_TYPE_LEVEL_HIGH
79 IRQ_TYPE_LEVEL_HIGH
74 IRQ_TYPE_LEVEL_HIGH
75 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "ID_WAKEUP_R",
"ID_WAKEUP_F",
"VBUS_DET_F",
"VBUS_DET_R",
"USB_LINK_STATUS",
"USB_ADP_PROBE_PLUG",
"USB_ADP_PROBE_UNPLUG";
vddulpivio18-supply = <&ab8500_ldo_intcore_reg>;
v-ape-supply = <&db8500_vape_reg>;
musb_1v8-supply = <&db8500_vsmps2_reg>;
clocks = <&prcmu_clk PRCMU_SYSCLK>;
clock-names = "sysclk";
};
ab8500-ponkey {
compatible = "stericsson,ab8500-poweron-key";
interrupts = <6 IRQ_TYPE_LEVEL_HIGH
7 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "ONKEY_DBF", "ONKEY_DBR";
};
ab8500-sysctrl {
compatible = "stericsson,ab8500-sysctrl";
};
ab8500-pwm {
compatible = "stericsson,ab8500-pwm";
clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
clock-names = "intclk";
};
ab8500-debugfs {
compatible = "stericsson,ab8500-debug";
};
codec: ab8500-codec {
compatible = "stericsson,ab8500-codec";
V-AUD-supply = <&ab8500_ldo_audio_reg>;
V-AMIC1-supply = <&ab8500_ldo_anamic1_reg>;
V-AMIC2-supply = <&ab8500_ldo_anamic2_reg>;
V-DMIC-supply = <&ab8500_ldo_dmic_reg>;
clocks = <&ab8500_clock AB8500_SYSCLK_AUDIO>;
clock-names = "audioclk";
stericsson,earpeice-cmv = <950>; /* Units in mV. */
};
ext_regulators: ab8500-ext-regulators {
compatible = "stericsson,ab8500-ext-regulator";
ab8500_ext1_reg: ab8500_ext1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-boot-on;
regulator-always-on;
};
ab8500_ext2_reg: ab8500_ext2 {
regulator-min-microvolt = <1360000>;
regulator-max-microvolt = <1360000>;
regulator-boot-on;
regulator-always-on;
};
ab8500_ext3_reg: ab8500_ext3 {
regulator-min-microvolt = <3400000>;
regulator-max-microvolt = <3400000>;
regulator-boot-on;
};
};
ab8500-regulators {
compatible = "stericsson,ab8500-regulator";
vin-supply = <&ab8500_ext3_reg>;
// supplies to the display/camera
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <2900000>;
regulator-boot-on;
/* BUG: If turned off MMC will be affected. */
regulator-always-on;
};
// supplies to the on-board eMMC
ab8500_ldo_aux2_reg: ab8500_ldo_aux2 {
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <3300000>;
};
// supply for VAUX3; SDcard slots
ab8500_ldo_aux3_reg: ab8500_ldo_aux3 {
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <3300000>;
};
// supply for v-intcore12; VINTCORE12 LDO
ab8500_ldo_intcore_reg: ab8500_ldo_intcore {
};
// supply for tvout; gpadc; TVOUT LDO
ab8500_ldo_tvout_reg: ab8500_ldo_tvout {
};
// supply for ab8500-vaudio; VAUDIO LDO
ab8500_ldo_audio_reg: ab8500_ldo_audio {
};
// supply for v-anamic1 VAMIC1 LDO
ab8500_ldo_anamic1_reg: ab8500_ldo_anamic1 {
};
// supply for v-amic2; VAMIC2 LDO; reuse constants for AMIC1
ab8500_ldo_anamic2_reg: ab8500_ldo_anamic2 {
};
// supply for v-dmic; VDMIC LDO
ab8500_ldo_dmic_reg: ab8500_ldo_dmic {
};
// supply for U8500 CSI/DSI; VANA LDO
ab8500_ldo_ana_reg: ab8500_ldo_ana {
};
};
};
};
sound {
stericsson,audio-codec = <&codec>;
clocks = <&prcmu_clk PRCMU_SYSCLK>, <&ab8500_clock AB8500_SYSCLK_ULP>, <&ab8500_clock AB8500_SYSCLK_INT>;
clock-names = "sysclk", "ulpclk", "intclk";
};
mcde@a0350000 {
vana-supply = <&ab8500_ldo_ana_reg>;
dsi@a0351000 {
vana-supply = <&ab8500_ldo_ana_reg>;
};
dsi@a0352000 {
vana-supply = <&ab8500_ldo_ana_reg>;
};
dsi@a0353000 {
vana-supply = <&ab8500_ldo_ana_reg>;
};
};
};
};

View file

@ -0,0 +1,275 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright 2012 Linaro Ltd
*/
#include <dt-bindings/clock/ste-ab8500.h>
/ {
/* Essential housekeeping hardware monitors */
iio-hwmon {
compatible = "iio-hwmon";
io-channels = <&gpadc 0x02>, /* Battery temperature */
<&gpadc 0x08>, /* Main battery voltage */
<&gpadc 0x09>, /* VBUS */
<&gpadc 0x0b>, /* Charger current */
<&gpadc 0x0c>; /* Backup battery voltage */
};
soc {
prcmu@80157000 {
ab8505 {
compatible = "stericsson,ab8505";
interrupt-parent = <&intc>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
interrupt-controller;
#interrupt-cells = <2>;
ab8500_clock: clock-controller {
compatible = "stericsson,ab8500-clk";
#clock-cells = <1>;
};
ab8505_gpio: ab8505-gpio {
compatible = "stericsson,ab8505-gpio";
gpio-controller;
#gpio-cells = <2>;
};
ab8500-rtc {
compatible = "stericsson,ab8500-rtc";
interrupts = <17 IRQ_TYPE_LEVEL_HIGH
18 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "60S", "ALARM";
};
gpadc: ab8500-gpadc {
compatible = "stericsson,ab8500-gpadc";
interrupts = <32 IRQ_TYPE_LEVEL_HIGH
39 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "HW_CONV_END", "SW_CONV_END";
vddadc-supply = <&ab8500_ldo_adc_reg>;
#address-cells = <1>;
#size-cells = <0>;
#io-channel-cells = <1>;
/* GPADC channels */
bat_ctrl: channel@01 {
reg = <0x01>;
};
btemp_ball: channel@02 {
reg = <0x02>;
};
acc_detect1: channel@04 {
reg = <0x04>;
};
acc_detect2: channel@05 {
reg = <0x05>;
};
adc_aux1: channel@06 {
reg = <0x06>;
};
adc_aux2: channel@07 {
reg = <0x07>;
};
main_batt_v: channel@08 {
reg = <0x08>;
};
vbus_v: channel@09 {
reg = <0x09>;
};
charger_c: channel@0b {
reg = <0x0b>;
};
bk_bat_v: channel@0c {
reg = <0x0c>;
};
usb_id: channel@0e {
reg = <0x0e>;
};
};
ab8500_battery: ab8500_battery {
status = "disabled";
thermistor-on-batctrl;
};
ab8500_fg {
status = "disabled";
compatible = "stericsson,ab8500-fg";
battery = <&ab8500_battery>;
io-channels = <&gpadc 0x08>;
io-channel-name = "main_bat_v";
};
ab8500_btemp {
status = "disabled";
compatible = "stericsson,ab8500-btemp";
battery = <&ab8500_battery>;
io-channels = <&gpadc 0x02>,
<&gpadc 0x01>;
io-channel-name = "btemp_ball",
"bat_ctrl";
};
ab8500_charger {
status = "disabled";
compatible = "stericsson,ab8500-charger";
battery = <&ab8500_battery>;
vddadc-supply = <&ab8500_ldo_adc_reg>;
io-channels = <&gpadc 0x09>,
<&gpadc 0x0b>;
io-channel-name = "vbus_v",
"usb_charger_c";
};
ab8500_chargalg {
status = "disabled";
compatible = "stericsson,ab8500-chargalg";
battery = <&ab8500_battery>;
};
ab8500_usb: ab8500_usb {
compatible = "stericsson,ab8500-usb";
interrupts = < 90 IRQ_TYPE_LEVEL_HIGH
96 IRQ_TYPE_LEVEL_HIGH
14 IRQ_TYPE_LEVEL_HIGH
15 IRQ_TYPE_LEVEL_HIGH
79 IRQ_TYPE_LEVEL_HIGH
74 IRQ_TYPE_LEVEL_HIGH
75 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "ID_WAKEUP_R",
"ID_WAKEUP_F",
"VBUS_DET_F",
"VBUS_DET_R",
"USB_LINK_STATUS",
"USB_ADP_PROBE_PLUG",
"USB_ADP_PROBE_UNPLUG";
vddulpivio18-supply = <&ab8500_ldo_intcore_reg>;
v-ape-supply = <&db8500_vape_reg>;
musb_1v8-supply = <&db8500_vsmps2_reg>;
clocks = <&prcmu_clk PRCMU_SYSCLK>;
clock-names = "sysclk";
};
ab8500-ponkey {
compatible = "stericsson,ab8500-poweron-key";
interrupts = <6 IRQ_TYPE_LEVEL_HIGH
7 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "ONKEY_DBF", "ONKEY_DBR";
};
ab8500-sysctrl {
compatible = "stericsson,ab8500-sysctrl";
};
ab8500-pwm {
compatible = "stericsson,ab8500-pwm";
clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
clock-names = "intclk";
};
ab8500-debugfs {
compatible = "stericsson,ab8500-debug";
};
codec: ab8500-codec {
compatible = "stericsson,ab8500-codec";
V-AUD-supply = <&ab8500_ldo_audio_reg>;
V-AMIC1-supply = <&ab8500_ldo_anamic1_reg>;
V-AMIC2-supply = <&ab8500_ldo_anamic2_reg>;
clocks = <&ab8500_clock AB8500_SYSCLK_AUDIO>;
clock-names = "audioclk";
stericsson,earpeice-cmv = <950>; /* Units in mV. */
};
ab8505-regulators {
compatible = "stericsson,ab8505-regulator";
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <3300000>;
};
ab8500_ldo_aux2_reg: ab8500_ldo_aux2 {
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <3300000>;
};
ab8500_ldo_aux3_reg: ab8500_ldo_aux3 {
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <3300000>;
};
ab8500_ldo_aux4_reg: ab8500_ldo_aux4 {
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <3300000>;
};
ab8500_ldo_aux5_reg: ab8500_ldo_aux5 {
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <2790000>;
};
ab8500_ldo_aux6_reg: ab8500_ldo_aux6 {
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <2790000>;
};
// supply for v-intcore12; VINTCORE12 LDO
ab8500_ldo_intcore_reg: ab8500_ldo_intcore {
regulator-min-microvolt = <1250000>;
regulator-max-microvolt = <1350000>;
};
// supply for gpadc; ADC LDO
ab8500_ldo_adc_reg: ab8500_ldo_adc {
};
// supply for ab8500-vaudio; VAUDIO LDO
ab8500_ldo_audio_reg: ab8500_ldo_audio {
};
// supply for v-anamic1 VAMIC1 LDO
ab8500_ldo_anamic1_reg: ab8500_ldo_anamic1 {
};
// supply for v-amic2; VAMIC2 LDO; reuse constants for AMIC1
ab8500_ldo_anamic2_reg: ab8500_ldo_anamic2 {
};
// supply for v-aux8; VAUX8 LDO
ab8500_ldo_aux8_reg: ab8500_ldo_aux8 {
};
// supply for U8500 CSI/DSI; VANA LDO
ab8500_ldo_ana_reg: ab8500_ldo_ana {
};
};
};
};
sound {
stericsson,audio-codec = <&codec>;
clocks = <&prcmu_clk PRCMU_SYSCLK>, <&ab8500_clock AB8500_SYSCLK_ULP>, <&ab8500_clock AB8500_SYSCLK_INT>;
clock-names = "sysclk", "ulpclk", "intclk";
};
mcde@a0350000 {
vana-supply = <&ab8500_ldo_ana_reg>;
dsi@a0351000 {
vana-supply = <&ab8500_ldo_ana_reg>;
};
dsi@a0352000 {
vana-supply = <&ab8500_ldo_ana_reg>;
};
dsi@a0353000 {
vana-supply = <&ab8500_ldo_ana_reg>;
};
};
};
};

View file

@ -0,0 +1,29 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "skeleton.dtsi"
#include "ste-dbx5x0.dtsi"
/ {
soc {
/* FIXME: Remove this when clk driver is implemented */
mtu@a03c6000 {
clock-frequency = <133000000>;
};
uart@80120000 {
clock = <38400000>;
};
uart@80121000 {
clock = <38400000>;
};
uart@80007000 {
clock = <38400000>;
};
};
reboot {
compatible = "syscon-reboot";
regmap = <&prcmu>;
offset = <0x228>; /* PRCM_APE_SOFTRST */
mask = <0x1>;
};
};

1144
arch/arm/dts/ste-dbx5x0.dtsi Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,20 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/dts-v1/;
#include "ste-dbx5x0-u-boot.dtsi"
#include "ste-ab8500.dtsi"
/ {
compatible = "samsung,stemmy", "st-ericsson,u8500";
chosen {
stdout-path = &serial2;
};
soc {
/* Debugging console UART */
uart@80007000 {
status = "okay";
};
};
};

View file

@ -1,9 +1,10 @@
#if !defined(CONFIG_ARCH_UNIPHIER) && !defined(CONFIG_ARCH_STI) && \
!defined(CONFIG_ARCH_K3) && !defined(CONFIG_ARCH_BCM6858) && \
!defined(CONFIG_ARCH_BCM63158) && !defined(CONFIG_ARCH_ROCKCHIP) && \
!defined(CONFIG_ARCH_LX2160A) && !defined(CONFIG_ARCH_LS1028A) && \
!defined(CONFIG_ARCH_LS2080A) && !defined(CONFIG_ARCH_LS1088A) && \
!defined(CONFIG_ARCH_ASPEED)
!defined(CONFIG_ARCH_K3) && !defined(CONFIG_ARCH_BCM68360) && \
!defined(CONFIG_ARCH_BCM6858) && !defined(CONFIG_ARCH_BCM63158) && \
!defined(CONFIG_ARCH_ROCKCHIP) && !defined(CONFIG_ARCH_LX2160A) && \
!defined(CONFIG_ARCH_LS1028A) && !defined(CONFIG_ARCH_LS2080A) && \
!defined(CONFIG_ARCH_LS1088A) && !defined(CONFIG_ARCH_ASPEED) && \
!defined(CONFIG_ARCH_U8500)
#include <asm/arch/gpio.h>
#endif
#include <asm-generic/gpio.h>

View file

@ -0,0 +1,27 @@
if ARCH_U8500
config SYS_SOC
default "u8500"
choice
prompt "U8500 board selection"
config TARGET_STEMMY
bool "Samsung (stemmy) board"
help
The Samsung "stemmy" board supports Samsung smartphones released with
the ST-Ericsson NovaThor U8500 SoC, e.g.
- Samsung Galaxy S III mini (GT-I8190) "golden"
- Samsung Galaxy S Advance (GT-I9070) "janice"
- Samsung Galaxy Xcover 2 (GT-S7710) "skomer"
and likely others as well (untested).
See board/ste/stemmy/README for details.
endchoice
source "board/ste/stemmy/Kconfig"
endif

View file

@ -0,0 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-or-later
obj-y += cache.o
obj-$(CONFIG_DISPLAY_CPUINFO) += cpuinfo.o

View file

@ -0,0 +1,37 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2019 Stephan Gerhold <stephan@gerhold.net>
*/
#include <common.h>
#include <cpu_func.h>
#include <asm/armv7.h>
#include <asm/pl310.h>
#define PL310_WAY_MASK 0xff
#if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
void enable_caches(void)
{
/* Enable D-cache. I-cache is already enabled in start.S */
dcache_enable();
}
#endif
#ifdef CONFIG_SYS_L2_PL310
void v7_outer_cache_disable(void)
{
struct pl310_regs *const pl310 = (struct pl310_regs *)CONFIG_SYS_PL310_BASE;
/*
* Linux expects the L2 cache to be turned off by the bootloader.
* Otherwise, it fails very early (shortly after decompressing the kernel).
*
* On U8500, the L2 cache can be only turned on/off from the secure world.
* Instead, prevent usage of the L2 cache by locking all ways.
* The kernel needs to unlock them to make the L2 cache work again.
*/
writel(PL310_WAY_MASK, &pl310->pl310_lockdown_dbase);
writel(PL310_WAY_MASK, &pl310->pl310_lockdown_ibase);
}
#endif

View file

@ -0,0 +1,25 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2019 Stephan Gerhold <stephan@gerhold.net>
*/
#include <common.h>
#include <asm/io.h>
#define U8500_BOOTROM_BASE 0x90000000
#define U8500_ASIC_ID_LOC_V2 (U8500_BOOTROM_BASE + 0x1DBF4)
int print_cpuinfo(void)
{
/* Convert ASIC ID to display string, e.g. 0x8520A0 => DB8520 V1.0 */
u32 asicid = readl(U8500_ASIC_ID_LOC_V2);
u32 cpu = (asicid >> 8) & 0xffff;
u32 rev = asicid & 0xff;
/* 0xA0 => 0x10 (V1.0) */
if (rev >= 0xa0)
rev -= 0x90;
printf("CPU: ST-Ericsson DB%x V%d.%d\n", cpu, rev >> 4, rev & 0xf);
return 0;
}

View file

@ -0,0 +1,17 @@
if ARCH_BCM68360
config SYS_VENDOR
default "broadcom"
config SYS_BOARD
default "bcm968360bg"
config SYS_CONFIG_NAME
default "broadcom_bcm968360bg"
endif
config TARGET_BCM968360BG
bool "Support Broadcom bcm968360bg"
depends on ARCH_BCM68360
select ARM64

View file

@ -0,0 +1,6 @@
BCM968360BG BOARD
M: Philippe Reynes <philippe.reynes@softathome.com>
S: Maintained
F: board/broadcom/bcm968360bg
F: include/configs/broadcom_bcm968360bg.h
F: configs/bcm968360bg_ram_defconfig

View file

@ -0,0 +1,3 @@
# SPDX-License-Identifier: GPL-2.0+
obj-y += bcm968360bg.o

View file

@ -0,0 +1,61 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2020 Philippe Reynes <philippe.reynes@softathome.com>
*/
#include <common.h>
#include <fdtdec.h>
#include <linux/io.h>
#ifdef CONFIG_ARM64
#include <asm/armv8/mmu.h>
static struct mm_region broadcom_bcm968360bg_mem_map[] = {
{
/* RAM */
.virt = 0x00000000UL,
.phys = 0x00000000UL,
.size = 8UL * SZ_1G,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
/* SoC */
.virt = 0x80000000UL,
.phys = 0x80000000UL,
.size = 0xff80000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
/* List terminator */
0,
}
};
struct mm_region *mem_map = broadcom_bcm968360bg_mem_map;
#endif
int board_init(void)
{
return 0;
}
int dram_init(void)
{
if (fdtdec_setup_mem_size_base() != 0)
printf("fdtdec_setup_mem_size_base() has failed\n");
return 0;
}
int dram_init_banksize(void)
{
fdtdec_setup_memory_banksize();
return 0;
}
int print_cpuinfo(void)
{
return 0;
}

View file

@ -6,8 +6,8 @@
#include <common.h>
#include "../common/common.h"
#include "kmp204x.h"
#include "common.h"
#include "qrio.h"
/* QRIO GPIO register offsets */
#define DIRECT_OFF 0x18
@ -135,10 +135,10 @@ void qrio_prstcfg(u8 bit, u8 mode)
prstcfg = in_be32(qrio_base + PRSTCFG_OFF);
for (i = 0; i < 2; i++) {
if (mode & (1<<i))
set_bit(2*bit+i, &prstcfg);
if (mode & (1 << i))
set_bit(2 * bit + i, &prstcfg);
else
clear_bit(2*bit+i, &prstcfg);
clear_bit(2 * bit + i, &prstcfg);
}
out_be32(qrio_base + PRSTCFG_OFF, prstcfg);
@ -180,6 +180,7 @@ void qrio_cpuwd_flag(bool flag)
{
u8 reason1;
void __iomem *qrio_base = (void *)CONFIG_SYS_QRIO_BASE;
reason1 = in_8(qrio_base + REASON1_OFF);
if (flag)
reason1 |= REASON1_CPUWD;
@ -188,6 +189,30 @@ void qrio_cpuwd_flag(bool flag)
out_8(qrio_base + REASON1_OFF, reason1);
}
#define REASON0_OFF 0x13
#define REASON0_SWURST 0x80
#define REASON0_CPURST 0x40
#define REASON0_BPRST 0x20
#define REASON0_COPRST 0x10
#define REASON0_SWCRST 0x08
#define REASON0_WDRST 0x04
#define REASON0_KBRST 0x02
#define REASON0_POWUP 0x01
#define UNIT_RESET\
(REASON0_POWUP | REASON0_COPRST | REASON0_KBRST |\
REASON0_BPRST | REASON0_SWURST | REASON0_WDRST)
#define CORE_RESET ((REASON1_CPUWD << 8) | REASON0_SWCRST)
bool qrio_reason_unitrst(void)
{
u16 reason;
void __iomem *qrio_base = (void *)CONFIG_SYS_QRIO_BASE;
reason = in_be16(qrio_base + REASON1_OFF);
return (reason & UNIT_RESET) > 0;
}
#define RSTCFG_OFF 0x11
void qrio_uprstreq(u8 mode)
@ -204,3 +229,51 @@ void qrio_uprstreq(u8 mode)
out_8(qrio_base + RSTCFG_OFF, rstcfg);
}
/* I2C deblocking uses the algorithm defined in board/keymile/common/common.c
* 2 dedicated QRIO GPIOs externally pull the SCL and SDA lines
* For I2C only the low state is activly driven and high state is pulled-up
* by a resistor. Therefore the deblock GPIOs are used
* -> as an active output to drive a low state
* -> as an open-drain input to have a pulled-up high state
*/
/* By default deblock GPIOs are floating */
void i2c_deblock_gpio_cfg(void)
{
/* set I2C bus 1 deblocking GPIOs input, but 0 value for open drain */
qrio_gpio_direction_input(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SCL);
qrio_gpio_direction_input(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SDA);
qrio_set_gpio(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SCL, 0);
qrio_set_gpio(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SDA, 0);
}
void set_sda(int state)
{
qrio_set_opendrain_gpio(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SDA, state);
}
void set_scl(int state)
{
qrio_set_opendrain_gpio(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SCL, state);
}
int get_sda(void)
{
return qrio_get_gpio(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SDA);
}
int get_scl(void)
{
return qrio_get_gpio(KM_I2C_DEBLOCK_PORT,
KM_I2C_DEBLOCK_SCL);
}

View file

@ -0,0 +1,40 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* (C) Copyright 2018 ABB
* Valentin Longchamp <valentin.longchamp@ch.abb.com>
*/
#ifndef __QRIO_H
#define __QRIO_H
/* QRIO GPIO ports */
#define QRIO_GPIO_A 0x40
#define QRIO_GPIO_B 0x60
int qrio_get_gpio(u8 port_off, u8 gpio_nr);
void qrio_set_opendrain_gpio(u8 port_off, u8 gpio_nr, u8 val);
void qrio_set_gpio(u8 port_off, u8 gpio_nr, bool value);
void qrio_gpio_direction_output(u8 port_off, u8 gpio_nr, bool value);
void qrio_gpio_direction_input(u8 port_off, u8 gpio_nr);
/* QRIO Periphery reset configurations */
#define PRSTCFG_POWUP_UNIT_CORE_RST 0x0
#define PRSTCFG_POWUP_UNIT_RST 0x1
#define PRSTCFG_POWUP_RST 0x3
void qrio_prst(u8 bit, bool en, bool wden);
void qrio_wdmask(u8 bit, bool wden);
void qrio_prstcfg(u8 bit, u8 mode);
void qrio_set_leds(void);
void qrio_enable_app_buffer(void);
void qrio_cpuwd_flag(bool flag);
bool qrio_reason_unitrst(void);
/* QRIO uP reset request configurations */
#define UPREQ_UNIT_RST 0x0
#define UPREQ_CORE_RST 0x1
void qrio_uprstreq(u8 mode);
void i2c_deblock_gpio_cfg(void);
#endif /* __QRIO_H */

View file

@ -7,6 +7,18 @@ config KM_FPGA_CONFIG
help
Include capability to change FPGA configuration.
config KM_FPGA_FORCE_CONFIG
bool "FPGA reconfiguration"
default n
help
If yes we force to reconfigure the FPGA always
config KM_FPGA_NO_RESET
bool "FPGA skip reset"
default n
help
If yes we skip triggering a reset of the FPGA
config KM_ENV_IS_IN_SPI_NOR
bool "Environment in SPI NOR"
default n

View file

@ -8,5 +8,4 @@ F: configs/km_kirkwood_128m16_defconfig
F: configs/km_kirkwood_pci_defconfig
F: configs/kmcoge5un_defconfig
F: configs/kmnusa_defconfig
F: configs/kmsugp1_defconfig
F: configs/kmsuv31_defconfig
F: configs/kmsuse2_defconfig

View file

@ -82,6 +82,7 @@ static int boco_set_bits(u8 reg, u8 flags)
#define FPGA_INIT_B 0x10
#define FPGA_DONE 0x20
#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
static int fpga_done(void)
{
int ret = 0;
@ -100,13 +101,16 @@ static int fpga_done(void)
return regval & FPGA_DONE ? 1 : 0;
}
#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
int skip;
static int skip;
int trigger_fpga_config(void)
{
int ret = 0;
skip = 0;
#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
/* if the FPGA is already configured, we do not want to
* reconfigure it */
skip = 0;
@ -115,6 +119,7 @@ int trigger_fpga_config(void)
skip = 1;
return 0;
}
#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
if (check_boco2()) {
/* we have a BOCO2, this has to be triggered here */
@ -188,29 +193,12 @@ int wait_for_fpga_config(void)
return 0;
}
#if defined(KM_PCIE_RESET_MPP7)
#define KM_PEX_RST_GPIO_PIN 7
#if defined(CONFIG_KM_FPGA_NO_RESET)
int fpga_reset(void)
{
if (!check_boco2()) {
/* we do not have BOCO2, this is not really used */
return 0;
}
printf("PCIe reset through GPIO7: ");
/* apply PCIe reset via GPIO */
kw_gpio_set_valid(KM_PEX_RST_GPIO_PIN, 1);
kw_gpio_direction_output(KM_PEX_RST_GPIO_PIN, 1);
kw_gpio_set_value(KM_PEX_RST_GPIO_PIN, 0);
udelay(1000*10);
kw_gpio_set_value(KM_PEX_RST_GPIO_PIN, 1);
printf(" done\n");
/* no dedicated reset pin for FPGA */
return 0;
}
#else
#define PRST1 0x4

View file

@ -69,11 +69,7 @@ static const u32 kwmpp_config[] = {
MPP4_NF_IO6,
MPP5_NF_IO7,
MPP6_SYSRST_OUTn,
#if defined(KM_PCIE_RESET_MPP7)
MPP7_GPO,
#else
MPP7_PEX_RST_OUTn,
#endif
#if defined(CONFIG_SYS_I2C_SOFT)
MPP8_GPIO, /* SDA */
MPP9_GPIO, /* SCL */

View file

@ -6,5 +6,5 @@
# See file CREDITS for list of people who contributed to this
# project.
obj-y := kmp204x.o ddr.o eth.o tlb.o pci.o law.o qrio.o \
../common/common.o ../common/ivm.o
obj-y := kmp204x.o ddr.o eth.o tlb.o pci.o law.o ../common/common.o\
../common/ivm.o ../common/qrio.o

View file

@ -24,6 +24,7 @@
#include <fm_eth.h>
#include "../common/common.h"
#include "../common/qrio.h"
#include "kmp204x.h"
static uchar ivm_content[CONFIG_SYS_IVM_EEPROM_MAX_LEN];
@ -35,51 +36,6 @@ int checkboard(void)
return 0;
}
/* I2C deblocking uses the algorithm defined in board/keymile/common/common.c
* 2 dedicated QRIO GPIOs externally pull the SCL and SDA lines
* For I2C only the low state is activly driven and high state is pulled-up
* by a resistor. Therefore the deblock GPIOs are used
* -> as an active output to drive a low state
* -> as an open-drain input to have a pulled-up high state
*/
/* QRIO GPIOs used for deblocking */
#define DEBLOCK_PORT1 GPIO_A
#define DEBLOCK_SCL1 20
#define DEBLOCK_SDA1 21
/* By default deblock GPIOs are floating */
static void i2c_deblock_gpio_cfg(void)
{
/* set I2C bus 1 deblocking GPIOs input, but 0 value for open drain */
qrio_gpio_direction_input(DEBLOCK_PORT1, DEBLOCK_SCL1);
qrio_gpio_direction_input(DEBLOCK_PORT1, DEBLOCK_SDA1);
qrio_set_gpio(DEBLOCK_PORT1, DEBLOCK_SCL1, 0);
qrio_set_gpio(DEBLOCK_PORT1, DEBLOCK_SDA1, 0);
}
void set_sda(int state)
{
qrio_set_opendrain_gpio(DEBLOCK_PORT1, DEBLOCK_SDA1, state);
}
void set_scl(int state)
{
qrio_set_opendrain_gpio(DEBLOCK_PORT1, DEBLOCK_SCL1, state);
}
int get_sda(void)
{
return qrio_get_gpio(DEBLOCK_PORT1, DEBLOCK_SDA1);
}
int get_scl(void)
{
return qrio_get_gpio(DEBLOCK_PORT1, DEBLOCK_SCL1);
}
#define ZL30158_RST 8
#define BFTIC4_RST 0
#define RSTRQSR1_WDT_RR 0x00200000
@ -138,7 +94,7 @@ int board_early_init_r(void)
/* enable Application Buffer */
qrio_enable_app_buffer();
return ret;
return 0;
}
unsigned long get_board_sys_clk(unsigned long dummy)
@ -297,7 +253,7 @@ int ft_board_setup(void *blob, bd_t *bd)
#if defined(CONFIG_POST)
/* DIC26_SELFTEST GPIO used to start factory test sw */
#define SELFTEST_PORT GPIO_A
#define SELFTEST_PORT QRIO_GPIO_A
#define SELFTEST_PIN 31
int post_hotkeys_pressed(void)

View file

@ -4,31 +4,5 @@
* Valentin Longchamp <valentin.longchamp@keymile.com>
*/
/* QRIO GPIO ports */
#define GPIO_A 0x40
#define GPIO_B 0x60
int qrio_get_gpio(u8 port_off, u8 gpio_nr);
void qrio_set_opendrain_gpio(u8 port_off, u8 gpio_nr, u8 val);
void qrio_set_gpio(u8 port_off, u8 gpio_nr, bool value);
void qrio_gpio_direction_output(u8 port_off, u8 gpio_nr, bool value);
void qrio_gpio_direction_input(u8 port_off, u8 gpio_nr);
#define PRSTCFG_POWUP_UNIT_CORE_RST 0x0
#define PRSTCFG_POWUP_UNIT_RST 0x1
#define PRSTCFG_POWUP_RST 0x3
void qrio_prst(u8 bit, bool en, bool wden);
void qrio_wdmask(u8 bit, bool wden);
void qrio_prstcfg(u8 bit, u8 mode);
void qrio_set_leds(void);
void qrio_enable_app_buffer(void);
void qrio_cpuwd_flag(bool flag);
int qrio_reset_reason(void);
#define UPREQ_UNIT_RST 0x0
#define UPREQ_CORE_RST 0x1
void qrio_uprstreq(u8 mode);
void pci_of_setup(void *blob, bd_t *bd);

View file

@ -16,13 +16,14 @@
#include <asm/fsl_serdes.h>
#include <linux/errno.h>
#include "../common/qrio.h"
#include "kmp204x.h"
#define PROM_SEL_L 11
/* control the PROM_SEL_L signal*/
static void toggle_fpga_eeprom_bus(bool cpu_own)
{
qrio_gpio_direction_output(GPIO_A, PROM_SEL_L, !cpu_own);
qrio_gpio_direction_output(QRIO_GPIO_A, PROM_SEL_L, !cpu_own);
}
#define CONF_SEL_L 10
@ -40,17 +41,17 @@ int trigger_fpga_config(void)
toggle_fpga_eeprom_bus(false);
/* assert CONF_SEL_L to be able to drive FPGA_PROG_L */
qrio_gpio_direction_output(GPIO_A, CONF_SEL_L, 0);
qrio_gpio_direction_output(QRIO_GPIO_A, CONF_SEL_L, 0);
/* trigger the config start */
qrio_gpio_direction_output(GPIO_A, FPGA_PROG_L, 0);
qrio_gpio_direction_output(QRIO_GPIO_A, FPGA_PROG_L, 0);
/* small delay for INIT_L line */
udelay(10);
/* wait for FPGA_INIT to be asserted */
do {
init_l = qrio_get_gpio(GPIO_A, FPGA_INIT_L);
init_l = qrio_get_gpio(QRIO_GPIO_A, FPGA_INIT_L);
if (timeout-- == 0) {
printf("FPGA_INIT timeout\n");
ret = -EFAULT;
@ -60,7 +61,7 @@ int trigger_fpga_config(void)
} while (init_l);
/* deassert FPGA_PROG, config should start */
qrio_set_gpio(GPIO_A, FPGA_PROG_L, 1);
qrio_set_gpio(QRIO_GPIO_A, FPGA_PROG_L, 1);
return ret;
}
@ -74,7 +75,7 @@ static int wait_for_fpga_config(void)
printf("PCIe FPGA config:");
do {
done = qrio_get_gpio(GPIO_A, FPGA_DONE);
done = qrio_get_gpio(QRIO_GPIO_A, FPGA_DONE);
if (timeout-- == 0) {
printf(" FPGA_DONE timeout\n");
ret = -EFAULT;
@ -87,7 +88,7 @@ static int wait_for_fpga_config(void)
err_out:
/* deactive CONF_SEL and give the CPU conf EEPROM access */
qrio_set_gpio(GPIO_A, CONF_SEL_L, 1);
qrio_set_gpio(QRIO_GPIO_A, CONF_SEL_L, 1);
toggle_fpga_eeprom_bus(true);
return ret;

View file

@ -1,6 +1,6 @@
altbootcmd=run ${subbootcmds}
bootcmd=run ${subbootcmds}
configure=run set_uimage; setenv tftppath ${IVM_Symbol} ; km_setboardid && saveenv && reset
configure=run set_uimage; run set_tftppath; km_setboardid && run try_import_nfs_path && saveenv && reset
subbootcmds=tftpfdt tftpkernel nfsargs add_default boot
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${toolchain}/${arch}
tftpfdt=if run set_fdthigh || test ${arch} != arm; then if tftpboot ${fdt_addr_r} ${tftppath}/fdt_0x${IVM_BoardId}_0x${IVM_HWKey}.dtb; then; else tftpboot ${fdt_addr_r} ${tftppath}/${hostname}.dtb; fi; else true; fi
@ -8,3 +8,5 @@ tftpkernel=tftpboot ${load_addr_r} ${tftppath}/${uimage}
toolchain=/opt/eldk
rootfssize=0
set_uimage=printenv uimage || setenv uimage uImage
set_tftppath=if test ${hostname} = kmcoge5un; then setenv tftppath CI5UN; else if test ${hostname} = kmcoge5ne; then setenv tftppath CI5NE; else setenv tftppath ${IVM_Symbol}; fi; fi
try_import_nfs_path=if tftpboot 0x200000 ${tftppath}/nfs-path.txt; then env import -t 0x200000 ${filesize}; else echo no auto nfs path imported; echo you can set nfsargs in /tftpboot/${tftppath}/nfs-path.txt and rerun develop; fi

View file

@ -2,12 +2,14 @@ addramfs=setenv bootargs "${bootargs} phram.phram=rootfs${boot_bank},${rootfsadd
boot_bank=-1
altbootcmd=run ${subbootcmds}
bootcmd=run ${subbootcmds}
subbootcmds=tftpfdt tftpkernel setrootfsaddr tftpramfs flashargs add_default addpanic addramfs boot
subbootcmds=save_and_reset_once tftpfdt tftpkernel setrootfsaddr tftpramfs flashargs add_default addpanic addramfs boot
save_and_reset_once=setenv save_and_reset_once true && save && reset
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath}
configure=run set_uimage; km_setboardid && saveenv && reset
rootfsfile=${hostname}/rootfsImage
configure=run set_uimage; run set_tftppath; km_setboardid && run try_import_rootfssize && saveenv && reset
setrootfsaddr=setexpr value ${pnvramaddr} - ${rootfssize} && setenv rootfsaddr 0x${value}
tftpfdt=if run set_fdthigh || test ${arch} != arm; then tftpboot ${fdt_addr_r} ${hostname}/${hostname}.dtb; else true; fi
tftpkernel=tftpboot ${load_addr_r} ${hostname}/${uimage}
tftpramfs=tftpboot ${rootfsaddr} ${hostname}/rootfsImage
tftpfdt=if run set_fdthigh || test ${arch} != arm; then if tftpboot ${fdt_addr_r} ${tftppath}/fdt_0x${IVM_BoardId}_0x${IVM_HWKey}.dtb; then; else tftpboot ${fdt_addr_r} ${tftppath}/${hostname}.dtb; fi; else true; fi
tftpkernel=tftpboot ${load_addr_r} ${tftppath}/${uimage}
tftpramfs=tftpboot ${rootfsaddr} ${tftppath}/rootfsImage
set_uimage=printenv uimage || setenv uimage uImage
set_tftppath=if test ${hostname} = kmcoge5un; then setenv tftppath CI5UN; else if test ${hostname} = kmcoge5ne; then setenv tftppath CI5NE; else setenv tftppath ${IVM_Symbol}; fi; fi
try_import_rootfssize=if tftpboot 0x200000 ${tftppath}/rootfssize.txt; then env import -t 0x200000 ${filesize}; else echo no auto rootfs size; echo you can set rootfssize in /tftpboot/${tftppath}/rootfssize.txt and rerun ramfs; fi

12
board/ste/stemmy/Kconfig Normal file
View file

@ -0,0 +1,12 @@
if TARGET_STEMMY
config SYS_BOARD
default "stemmy"
config SYS_VENDOR
default "ste"
config SYS_CONFIG_NAME
default "stemmy"
endif

View file

@ -0,0 +1,6 @@
STEMMY BOARD
M: Stephan Gerhold <stephan@gerhold.net>
S: Maintained
F: board/ste/stemmy/
F: include/configs/stemmy.h
F: configs/stemmy_defconfig

View file

@ -0,0 +1,2 @@
# SPDX-License-Identifier: GPL-2.0-or-later
obj-y := stemmy.o

49
board/ste/stemmy/README Normal file
View file

@ -0,0 +1,49 @@
ST-Ericsson U8500 Samsung "stemmy" board
========================================
The "stemmy" board supports Samsung smartphones released with
the ST-Ericsson NovaThor U8500 SoC, e.g.
- Samsung Galaxy S III mini (GT-I8190) "golden"
- Samsung Galaxy S Advance (GT-I9070) "janice"
- Samsung Galaxy Xcover 2 (GT-S7710) "skomer"
and likely others as well (untested).
At the moment, U-Boot is intended to be chain-loaded from
the original Samsung bootloader, not replacing it entirely.
Installation
------------
1. Setup cross compiler, e.g. export CROSS_COMPILE=arm-none-eabi-
2. make stemmy_defconfig
3. make
For newer devices (golden and skomer), the U-Boot binary has to be packed into
an Android boot image. janice boots the raw U-Boot binary from the boot partition.
4. Obtain mkbootimg, e.g. https://android.googlesource.com/platform/system/core/+/refs/tags/android-7.1.2_r37/mkbootimg/mkbootimg
5. mkbootimg \
--kernel=u-boot.bin \
--base=0x00000000 \
--kernel_offset=0x00100000 \
--ramdisk_offset=0x02000000 \
--tags_offset=0x00000100 \
--output=u-boot.img
6. Enter Samsung download mode (press Power + Home + Volume Down)
7. Flash U-Boot image to Android boot partition using Heimdall:
https://gitlab.com/BenjaminDobell/Heimdall
heimdall flash --Kernel u-boot.(bin|img)
8. After reboot U-Boot prompt should appear via UART.
UART
----
UART is available through the micro USB port, similar to the Carkit standard.
With a ~619kOhm resistor between ID and GND, 1.8V RX/TX is available at D+/D-.
Make sure to connect the UART cable *before* turning on the phone.

18
board/ste/stemmy/stemmy.c Normal file
View file

@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2019 Stephan Gerhold <stephan@gerhold.net>
*/
#include <common.h>
DECLARE_GLOBAL_DATA_PTR;
int dram_init(void)
{
gd->ram_size = get_ram_size(CONFIG_SYS_SDRAM_BASE, CONFIG_SYS_SDRAM_SIZE);
return 0;
}
int board_init(void)
{
return 0;
}

View file

@ -1312,7 +1312,8 @@ void handle_pxe_menu(cmd_tbl_t *cmdtp, struct pxe_menu *cfg)
/* display BMP if available */
if (cfg->bmp) {
if (get_relfile(cmdtp, cfg->bmp, image_load_addr)) {
run_command("cls", 0);
if (CONFIG_IS_ENABLED(CMD_CLS))
run_command("cls", 0);
bmp_display(image_load_addr,
BMP_ALIGN_CENTER, BMP_ALIGN_CENTER);
} else {

View file

@ -40,7 +40,6 @@ static int do_zfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
ulong addr = 0;
disk_partition_t info;
struct blk_desc *dev_desc;
char buf[12];
unsigned long count;
const char *addr_str;
struct zfs_file zfile;

View file

@ -157,8 +157,6 @@ void board_init_f_init_reserve(ulong base)
#if CONFIG_VAL(SYS_MALLOC_F_LEN)
/* go down one 'early malloc arena' */
gd->malloc_base = base;
/* next alloc will be higher by one 'early malloc arena' size */
base += CONFIG_VAL(SYS_MALLOC_F_LEN);
#endif
if (CONFIG_IS_ENABLED(SYS_REPORT_STACK_F_USAGE))

View file

@ -259,11 +259,9 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
debug("%s ", genimg_get_type_name(type));
}
if (IS_ENABLED(CONFIG_SPL_OS_BOOT) && IS_ENABLED(CONFIG_SPL_GZIP)) {
if (fit_image_get_comp(fit, node, &image_comp))
puts("Cannot get image compression format.\n");
else
debug("%s ", genimg_get_comp_name(image_comp));
if (IS_ENABLED(CONFIG_SPL_GZIP)) {
fit_image_get_comp(fit, node, &image_comp);
debug("%s ", genimg_get_comp_name(image_comp));
}
if (fit_image_get_load(fit, node, &load_addr))

View file

@ -0,0 +1,53 @@
CONFIG_ARM=y
CONFIG_ARCH_BCM68360=y
CONFIG_SYS_TEXT_BASE=0x10000000
CONFIG_SYS_MALLOC_F_LEN=0x8000
CONFIG_ENV_SIZE=0x2000
CONFIG_NR_DRAM_BANKS=1
CONFIG_TARGET_BCM968360BG=y
CONFIG_ENV_VARS_UBOOT_CONFIG=y
CONFIG_FIT=y
CONFIG_FIT_SIGNATURE=y
CONFIG_FIT_VERBOSE=y
CONFIG_LEGACY_IMAGE_FORMAT=y
CONFIG_SUPPORT_RAW_INITRD=y
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_HUSH_PARSER=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_MTD=y
CONFIG_CMD_NAND=y
CONFIG_CMD_PART=y
CONFIG_CMD_SPI=y
CONFIG_DOS_PARTITION=y
CONFIG_ISO_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_DEFAULT_DEVICE_TREE="bcm968360bg"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
# CONFIG_NET is not set
CONFIG_BLK=y
CONFIG_CLK=y
CONFIG_DM_GPIO=y
CONFIG_BCM6345_GPIO=y
CONFIG_LED=y
CONFIG_LED_BCM6858=y
CONFIG_LED_BLINK=y
# CONFIG_MMC is not set
CONFIG_MTD=y
CONFIG_DM_MTD=y
CONFIG_MTD_RAW_NAND=y
CONFIG_NAND_BRCMNAND=y
CONFIG_NAND_BRCMNAND_68360=y
CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
CONFIG_SPI_FLASH_MACRONIX=y
CONFIG_SPECIFY_CONSOLE_INDEX=y
CONFIG_CONS_INDEX=0
CONFIG_DM_SERIAL=y
CONFIG_SERIAL_SEARCH_ALL=y
CONFIG_BCM6345_SERIAL=y
CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_BCM63XX_HSSPI=y
CONFIG_SYSRESET=y
CONFIG_SYSRESET_WATCHDOG=y
CONFIG_WDT_BCM6345=y

View file

@ -5,13 +5,14 @@ CONFIG_KIRKWOOD=y
CONFIG_SYS_TEXT_BASE=0x07d00000
CONFIG_TARGET_KM_KIRKWOOD=y
CONFIG_KM_FPGA_CONFIG=y
CONFIG_KM_FPGA_FORCE_CONFIG=y
CONFIG_KM_FPGA_NO_RESET=y
CONFIG_KM_ENV_IS_IN_SPI_NOR=y
CONFIG_KM_PIGGY4_88E6352=y
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_SECT_SIZE=0x10000
CONFIG_ENV_OFFSET=0xC0000
CONFIG_IDENT_STRING="\nKeymile SUGP1"
CONFIG_SYS_EXTRA_OPTIONS="KM_SUGP1"
CONFIG_ENV_SECT_SIZE=0x10000
CONFIG_IDENT_STRING="\nABB SUSE2"
CONFIG_SYS_EXTRA_OPTIONS="KM_SUSE2"
CONFIG_MISC_INIT_R=y
CONFIG_VERSION_VARIABLE=y
# CONFIG_DISPLAY_BOARDINFO is not set
@ -48,7 +49,7 @@ CONFIG_MTD=y
CONFIG_MTD_RAW_NAND=y
CONFIG_SF_DEFAULT_SPEED=8100000
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_MV88E6352_SWITCH=y
CONFIG_SPI_FLASH_MACRONIX=y
CONFIG_MVGBE=y
CONFIG_MII=y
CONFIG_SYS_NS16550=y

View file

@ -1,55 +0,0 @@
CONFIG_ARM=y
CONFIG_SYS_DCACHE_OFF=y
CONFIG_ARCH_CPU_INIT=y
CONFIG_KIRKWOOD=y
CONFIG_SYS_TEXT_BASE=0x07d00000
CONFIG_TARGET_KM_KIRKWOOD=y
CONFIG_KM_FPGA_CONFIG=y
CONFIG_KM_ENV_IS_IN_SPI_NOR=y
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_SECT_SIZE=0x10000
CONFIG_ENV_OFFSET=0xC0000
CONFIG_IDENT_STRING="\nKeymile SUV31"
CONFIG_SYS_EXTRA_OPTIONS="KM_SUV31"
CONFIG_MISC_INIT_R=y
CONFIG_VERSION_VARIABLE=y
# CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_HUSH_PARSER=y
CONFIG_AUTOBOOT_KEYED=y
CONFIG_AUTOBOOT_PROMPT="Hit <SPACE> key to stop autoboot in %2ds\n"
CONFIG_AUTOBOOT_STOP_STR=" "
CONFIG_CMD_ASKENV=y
CONFIG_CMD_GREPENV=y
CONFIG_CMD_EEPROM=y
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_I2C=y
CONFIG_CMD_NAND=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_MII=y
CONFIG_CMD_PING=y
CONFIG_CMD_JFFS2=y
CONFIG_CMD_MTDPARTS=y
CONFIG_MTDIDS_DEFAULT="nand0=orion_nand"
CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:-(ubi0);"
CONFIG_CMD_UBI=y
# CONFIG_CMD_UBIFS is not set
CONFIG_OF_CONTROL=y
CONFIG_DEFAULT_DEVICE_TREE="kirkwood-km_kirkwood"
CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
CONFIG_ENV_OFFSET_REDUND=0xD0000
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_BOOTCOUNT_LIMIT=y
CONFIG_BOOTCOUNT_RAM=y
CONFIG_BOOTCOUNT_BOOTLIMIT=3
# CONFIG_MMC is not set
CONFIG_MTD=y
CONFIG_MTD_RAW_NAND=y
CONFIG_SF_DEFAULT_SPEED=8100000
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_MVGBE=y
CONFIG_MII=y
CONFIG_SYS_NS16550=y
CONFIG_SPI=y
CONFIG_KIRKWOOD_SPI=y
CONFIG_BCH=y

18
configs/stemmy_defconfig Normal file
View file

@ -0,0 +1,18 @@
CONFIG_ARM=y
CONFIG_ARCH_U8500=y
CONFIG_SYS_TEXT_BASE=0x100000
CONFIG_NR_DRAM_BANKS=1
CONFIG_SYS_CONSOLE_INFO_QUIET=y
CONFIG_HUSH_PARSER=y
CONFIG_CMD_CONFIG=y
CONFIG_CMD_LICENSE=y
CONFIG_CMD_DM=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_MMC=y
CONFIG_CMD_PART=y
CONFIG_CMD_GETTIME=y
CONFIG_EFI_PARTITION=y
CONFIG_DEFAULT_DEVICE_TREE="ste-ux500-samsung-stemmy"
# CONFIG_NET is not set
# CONFIG_MMC_HW_PARTITIONING is not set
# CONFIG_EFI_LOADER is not set

View file

@ -104,17 +104,18 @@ typedef lbaint_t lba512_t;
#endif
/*
* Overflowless variant of (block_count * mul_by / 2**div_by)
* when div_by > mul_by
* Overflowless variant of (block_count * mul_by / 2**right_shift)
* when 2**right_shift > mul_by
*/
static lba512_t lba512_muldiv(lba512_t block_count, lba512_t mul_by, int div_by)
static lba512_t lba512_muldiv(lba512_t block_count, lba512_t mul_by,
int right_shift)
{
lba512_t bc_quot, bc_rem;
/* x * m / d == x / d * m + (x % d) * m / d */
bc_quot = block_count >> div_by;
bc_rem = block_count - (bc_quot << div_by);
return bc_quot * mul_by + ((bc_rem * mul_by) >> div_by);
bc_quot = block_count >> right_shift;
bc_rem = block_count - (bc_quot << right_shift);
return bc_quot * mul_by + ((bc_rem * mul_by) >> right_shift);
}
void dev_print (struct blk_desc *dev_desc)

View file

@ -55,7 +55,8 @@ config ALTERA_PIO
config BCM6345_GPIO
bool "BCM6345 GPIO driver"
depends on DM_GPIO && (ARCH_BMIPS || ARCH_BCM6858 || ARCH_BCM63158)
depends on DM_GPIO && (ARCH_BMIPS || ARCH_BCM68360 || \
ARCH_BCM6858 || ARCH_BCM63158)
help
This driver supports the GPIO banks on BCM6345 SoCs.

View file

@ -30,7 +30,7 @@ config LED_BCM6358
config LED_BCM6858
bool "LED Support for BCM6858"
depends on LED && (ARCH_BCM6858 || ARCH_BCM63158)
depends on LED && (ARCH_BCM68360 || ARCH_BCM6858 || ARCH_BCM63158)
help
This option enables support for LEDs connected to the BCM6858
HW has blinking capabilities and up to 32 LEDs can be controlled.

View file

@ -78,6 +78,12 @@ config NAND_BRCMNAND_6368
help
Enable support for broadcom nand driver on bcm6368.
config NAND_BRCMNAND_68360
bool "Support Broadcom NAND controller on bcm68360"
depends on NAND_BRCMNAND && ARCH_BCM68360
help
Enable support for broadcom nand driver on bcm68360.
config NAND_BRCMNAND_6838
bool "Support Broadcom NAND controller on bcm6838"
depends on NAND_BRCMNAND && ARCH_BMIPS && SOC_BMIPS_BCM6838

View file

@ -2,6 +2,7 @@
obj-$(CONFIG_NAND_BRCMNAND_6368) += bcm6368_nand.o
obj-$(CONFIG_NAND_BRCMNAND_63158) += bcm63158_nand.o
obj-$(CONFIG_NAND_BRCMNAND_68360) += bcm68360_nand.o
obj-$(CONFIG_NAND_BRCMNAND_6838) += bcm6838_nand.o
obj-$(CONFIG_NAND_BRCMNAND_6858) += bcm6858_nand.o
obj-$(CONFIG_NAND_BRCMNAND) += brcmnand.o

View file

@ -0,0 +1,123 @@
// SPDX-License-Identifier: GPL-2.0+
#include <common.h>
#include <asm/io.h>
#include <memalign.h>
#include <nand.h>
#include <linux/errno.h>
#include <linux/io.h>
#include <linux/ioport.h>
#include <dm.h>
#include "brcmnand.h"
struct bcm68360_nand_soc {
struct brcmnand_soc soc;
void __iomem *base;
};
#define BCM68360_NAND_INT 0x00
#define BCM68360_NAND_STATUS_SHIFT 0
#define BCM68360_NAND_STATUS_MASK (0xfff << BCM68360_NAND_STATUS_SHIFT)
#define BCM68360_NAND_INT_EN 0x04
#define BCM68360_NAND_ENABLE_SHIFT 0
#define BCM68360_NAND_ENABLE_MASK (0xffff << BCM68360_NAND_ENABLE_SHIFT)
enum {
BCM68360_NP_READ = BIT(0),
BCM68360_BLOCK_ERASE = BIT(1),
BCM68360_COPY_BACK = BIT(2),
BCM68360_PAGE_PGM = BIT(3),
BCM68360_CTRL_READY = BIT(4),
BCM68360_DEV_RBPIN = BIT(5),
BCM68360_ECC_ERR_UNC = BIT(6),
BCM68360_ECC_ERR_CORR = BIT(7),
};
static bool bcm68360_nand_intc_ack(struct brcmnand_soc *soc)
{
struct bcm68360_nand_soc *priv =
container_of(soc, struct bcm68360_nand_soc, soc);
void __iomem *mmio = priv->base + BCM68360_NAND_INT;
u32 val = brcmnand_readl(mmio);
if (val & (BCM68360_CTRL_READY << BCM68360_NAND_STATUS_SHIFT)) {
/* Ack interrupt */
val &= ~BCM68360_NAND_STATUS_MASK;
val |= BCM68360_CTRL_READY << BCM68360_NAND_STATUS_SHIFT;
brcmnand_writel(val, mmio);
return true;
}
return false;
}
static void bcm68360_nand_intc_set(struct brcmnand_soc *soc, bool en)
{
struct bcm68360_nand_soc *priv =
container_of(soc, struct bcm68360_nand_soc, soc);
void __iomem *mmio = priv->base + BCM68360_NAND_INT_EN;
u32 val = brcmnand_readl(mmio);
/* Don't ack any interrupts */
val &= ~BCM68360_NAND_STATUS_MASK;
if (en)
val |= BCM68360_CTRL_READY << BCM68360_NAND_ENABLE_SHIFT;
else
val &= ~(BCM68360_CTRL_READY << BCM68360_NAND_ENABLE_SHIFT);
brcmnand_writel(val, mmio);
}
static int bcm68360_nand_probe(struct udevice *dev)
{
struct udevice *pdev = dev;
struct bcm68360_nand_soc *priv = dev_get_priv(dev);
struct brcmnand_soc *soc;
struct resource res;
soc = &priv->soc;
dev_read_resource_byname(pdev, "nand-int-base", &res);
priv->base = devm_ioremap(dev, res.start, resource_size(&res));
if (IS_ERR(priv->base))
return PTR_ERR(priv->base);
soc->ctlrdy_ack = bcm68360_nand_intc_ack;
soc->ctlrdy_set_enabled = bcm68360_nand_intc_set;
/* Disable and ack all interrupts */
brcmnand_writel(0, priv->base + BCM68360_NAND_INT_EN);
brcmnand_writel(0, priv->base + BCM68360_NAND_INT);
return brcmnand_probe(pdev, soc);
}
static const struct udevice_id bcm68360_nand_dt_ids[] = {
{
.compatible = "brcm,nand-bcm68360",
},
{ /* sentinel */ }
};
U_BOOT_DRIVER(bcm68360_nand) = {
.name = "bcm68360-nand",
.id = UCLASS_MTD,
.of_match = bcm68360_nand_dt_ids,
.probe = bcm68360_nand_probe,
.priv_auto_alloc_size = sizeof(struct bcm68360_nand_soc),
};
void board_nand_init(void)
{
struct udevice *dev;
int ret;
ret = uclass_get_device_by_driver(UCLASS_MTD,
DM_GET_DRIVER(bcm68360_nand), &dev);
if (ret && ret != -ENODEV)
pr_err("Failed to initialize %s. (error %d)\n", dev->name,
ret);
}

View file

@ -84,7 +84,8 @@ config ATMEL_SPI
config BCM63XX_HSSPI
bool "BCM63XX HSSPI driver"
depends on (ARCH_BMIPS || ARCH_BCM6858 || ARCH_BCM63158)
depends on (ARCH_BMIPS || ARCH_BCM68360 || \
ARCH_BCM6858 || ARCH_BCM63158)
help
Enable the BCM6328 HSSPI driver. This driver can be used to
access the SPI NOR flash on platforms embedding this Broadcom

View file

@ -127,6 +127,15 @@ config X86_TSC_TIMER_EARLY_FREQ
hardware ways, nor got from device tree at the time when device
tree is not available yet.
config NOMADIK_MTU_TIMER
bool "Nomadik MTU Timer"
depends on TIMER
help
Enables support for the Nomadik Multi Timer Unit (MTU),
used in ST-Ericsson Ux500 SoCs.
The MTU provides 4 decrementing free-running timers.
At the moment, only the first timer is used by the driver.
config OMAP_TIMER
bool "Omap timer support"
depends on TIMER

View file

@ -12,6 +12,7 @@ obj-$(CONFIG_ATMEL_PIT_TIMER) += atmel_pit_timer.o
obj-$(CONFIG_CADENCE_TTC_TIMER) += cadence-ttc.o
obj-$(CONFIG_DESIGNWARE_APB_TIMER) += dw-apb-timer.o
obj-$(CONFIG_MPC83XX_TIMER) += mpc83xx_timer.o
obj-$(CONFIG_NOMADIK_MTU_TIMER) += nomadik-mtu-timer.o
obj-$(CONFIG_OMAP_TIMER) += omap-timer.o
obj-$(CONFIG_RENESAS_OSTM_TIMER) += ostm_timer.o
obj-$(CONFIG_RISCV_TIMER) += riscv_timer.o

View file

@ -0,0 +1,114 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2019 Stephan Gerhold <stephan@gerhold.net>
*
* Based on arch/arm/cpu/armv7/u8500/timer.c:
* Copyright (C) 2010 Linaro Limited
* John Rigby <john.rigby@linaro.org>
*
* Based on Linux kernel source and internal ST-Ericsson U-Boot source:
* Copyright (C) 2009 Alessandro Rubini
* Copyright (C) 2010 ST-Ericsson
* Copyright (C) 2010 Linus Walleij for ST-Ericsson
*/
#include <common.h>
#include <dm.h>
#include <timer.h>
#include <asm/io.h>
#define MTU_NUM_TIMERS 4
/* The timers */
struct nomadik_mtu_timer_regs {
u32 lr; /* Load register */
u32 cv; /* Current value */
u32 cr; /* Control register */
u32 bglr; /* Background load register */
};
/* The MTU that contains the timers */
struct nomadik_mtu_regs {
u32 imsc; /* Interrupt mask set/clear */
u32 ris; /* Raw interrupt status */
u32 mis; /* Masked interrupt status */
u32 icr; /* Interrupt clear register */
struct nomadik_mtu_timer_regs timers[MTU_NUM_TIMERS];
};
/* Bits for the control register */
#define MTU_CR_ONESHOT BIT(0) /* if 0 = wraps reloading from BGLR */
#define MTU_CR_32BITS BIT(1) /* if 0 = 16-bit counter */
#define MTU_CR_PRESCALE_SHIFT 2
#define MTU_CR_PRESCALE_1 (0 << MTU_CR_PRESCALE_SHIFT)
#define MTU_CR_PRESCALE_16 (1 << MTU_CR_PRESCALE_SHIFT)
#define MTU_CR_PRESCALE_256 (2 << MTU_CR_PRESCALE_SHIFT)
#define MTU_CR_PERIODIC BIT(6) /* if 0 = free-running */
#define MTU_CR_ENABLE BIT(7)
struct nomadik_mtu_priv {
struct nomadik_mtu_timer_regs *timer;
};
static int nomadik_mtu_get_count(struct udevice *dev, u64 *count)
{
struct nomadik_mtu_priv *priv = dev_get_priv(dev);
/* Decrementing counter: invert the value */
*count = timer_conv_64(~readl(&priv->timer->cv));
return 0;
}
static int nomadik_mtu_probe(struct udevice *dev)
{
struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
struct nomadik_mtu_priv *priv = dev_get_priv(dev);
struct nomadik_mtu_regs *mtu;
fdt_addr_t addr;
u32 prescale;
addr = dev_read_addr(dev);
if (addr == FDT_ADDR_T_NONE)
return -EINVAL;
mtu = (struct nomadik_mtu_regs *)addr;
priv->timer = mtu->timers; /* Use first timer */
if (!uc_priv->clock_rate)
return -EINVAL;
/* Use divide-by-16 counter if tick rate is more than 32 MHz */
if (uc_priv->clock_rate > 32000000) {
uc_priv->clock_rate /= 16;
prescale = MTU_CR_PRESCALE_16;
} else {
prescale = MTU_CR_PRESCALE_1;
}
/* Configure a free-running, auto-wrap counter with selected prescale */
writel(MTU_CR_ENABLE | prescale | MTU_CR_32BITS, &priv->timer->cr);
return 0;
}
static const struct timer_ops nomadik_mtu_ops = {
.get_count = nomadik_mtu_get_count,
};
static const struct udevice_id nomadik_mtu_ids[] = {
{ .compatible = "st,nomadik-mtu" },
{}
};
U_BOOT_DRIVER(nomadik_mtu) = {
.name = "nomadik_mtu",
.id = UCLASS_TIMER,
.of_match = nomadik_mtu_ids,
.priv_auto_alloc_size = sizeof(struct nomadik_mtu_priv),
.probe = nomadik_mtu_probe,
.ops = &nomadik_mtu_ops,
};

View file

@ -85,7 +85,8 @@ config WDT_AT91
config WDT_BCM6345
bool "BCM6345 watchdog timer support"
depends on WDT && (ARCH_BMIPS || ARCH_BCM6858 || ARCH_BCM63158)
depends on WDT && (ARCH_BMIPS || ARCH_BCM68360 || \
ARCH_BCM6858 || ARCH_BCM63158)
help
Select this to enable watchdog timer for BCM6345 SoCs.
The watchdog timer is stopped when initialized.

3
env/Kconfig vendored
View file

@ -1,5 +1,8 @@
menu "Environment"
config ENV_SUPPORT
def_bool y
config ENV_IS_NOWHERE
bool "Environment is not stored"
default y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \

13
env/Makefile vendored
View file

@ -3,12 +3,13 @@
# (C) Copyright 2004-2006
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
obj-y += common.o env.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += common.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += env.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += attr.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += flags.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += callback.o
ifndef CONFIG_SPL_BUILD
obj-y += attr.o
obj-y += callback.o
obj-y += flags.o
obj-$(CONFIG_ENV_IS_IN_EEPROM) += eeprom.o
extra-$(CONFIG_ENV_IS_EMBEDDED) += embedded.o
obj-$(CONFIG_ENV_IS_IN_EEPROM) += embedded.o
@ -19,10 +20,6 @@ obj-$(CONFIG_ENV_IS_IN_ONENAND) += onenand.o
obj-$(CONFIG_ENV_IS_IN_SATA) += sata.o
obj-$(CONFIG_ENV_IS_IN_REMOTE) += remote.o
obj-$(CONFIG_ENV_IS_IN_UBI) += ubi.o
else
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += attr.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += flags.o
obj-$(CONFIG_$(SPL_TPL_)ENV_SUPPORT) += callback.o
endif
obj-$(CONFIG_$(SPL_TPL_)ENV_IS_NOWHERE) += nowhere.o

View file

@ -0,0 +1,40 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (C) 2020 Philippe Reynes <philippe.reynes@softathome.com>
*/
#include <linux/sizes.h>
/*
* common
*/
/* UART */
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, \
230400, 500000, 1500000 }
/* Memory usage */
#define CONFIG_SYS_MAXARGS 24
#define CONFIG_SYS_MALLOC_LEN (1024 * 1024)
/*
* 6858
*/
/* RAM */
#define CONFIG_SYS_SDRAM_BASE 0x00000000
/* U-Boot */
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_TEXT_BASE + SZ_16M)
#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_TEXT_BASE
#define CONFIG_SKIP_LOWLEVEL_INIT
#ifdef CONFIG_MTD_RAW_NAND
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_SELF_INIT
#define CONFIG_SYS_NAND_ONFI_DETECTION
#endif /* CONFIG_MTD_RAW_NAND */
/*
* 968360bg
*/

View file

@ -69,7 +69,6 @@ REFLASH(dragonboard/u-boot.img, 8)\
#define CONFIG_EXTRA_ENV_SETTINGS \
"reflash="CONFIG_ENV_REFLASH"\0"\
"loadaddr=0x81000000\0" \
"fdt_high=0xffffffffffffffff\0" \
"initrd_high=0xffffffffffffffff\0" \
"linux_image=Image\0" \
"kernel_addr_r=0x81000000\0"\

View file

@ -38,15 +38,10 @@
#define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
#define CONFIG_KM_DISABLE_PCIE
/* KM_NUSA / KM_SUGP1 */
#elif defined(CONFIG_KM_NUSA) || defined(CONFIG_KM_SUGP1)
/* KM_NUSA */
#elif defined(CONFIG_KM_NUSA)
# if defined(CONFIG_KM_NUSA)
#define CONFIG_HOSTNAME "kmnusa"
# elif defined(CONFIG_KM_SUGP1)
#define CONFIG_HOSTNAME "kmsugp1"
#define KM_PCIE_RESET_MPP7
#endif
#undef CONFIG_SYS_KWD_CONFIG
#define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
@ -58,9 +53,9 @@
#define CONFIG_HOSTNAME "kmcoge5un"
#define CONFIG_KM_DISABLE_PCIE
/* KM_SUV31 */
#elif defined(CONFIG_KM_SUV31)
#define CONFIG_HOSTNAME "kmsuv31"
/* KM_SUSE2 */
#elif defined(CONFIG_KM_SUSE2)
#define CONFIG_HOSTNAME "kmsuse2"
#undef CONFIG_SYS_KWD_CONFIG
#define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
#define CONFIG_KM_UBI_PART_BOOT_OPTS ",2048"

View file

@ -224,6 +224,10 @@ unsigned long get_board_sys_clk(unsigned long dummy);
#define CONFIG_KM_CONSOLE_TTY "ttyS0"
/* I2C */
/* QRIO GPIOs used for deblocking */
#define KM_I2C_DEBLOCK_PORT QRIO_GPIO_A
#define KM_I2C_DEBLOCK_SCL 20
#define KM_I2C_DEBLOCK_SDA 21
#define CONFIG_SYS_I2C
#define CONFIG_SYS_I2C_INIT_BOARD

View file

@ -17,6 +17,8 @@
#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_2M)
#define CONFIG_SYS_MALLOC_LEN SZ_16M
#define CONFIG_SYS_BOOTM_LEN SZ_64M
/* For timer, QEMU emulates an ARMv7/ARMv8 architected timer */
#define CONFIG_SYS_HZ 1000

29
include/configs/stemmy.h Normal file
View file

@ -0,0 +1,29 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2019 Stephan Gerhold <stephan@gerhold.net>
*/
#ifndef __CONFIGS_STEMMY_H
#define __CONFIGS_STEMMY_H
#include <linux/sizes.h>
#define CONFIG_SKIP_LOWLEVEL_INIT /* Loaded by another bootloader */
#define CONFIG_SYS_MALLOC_LEN SZ_2M
/* Physical Memory Map */
#define PHYS_SDRAM_1 0x00000000 /* DDR-SDRAM Bank #1 */
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
#define CONFIG_SYS_SDRAM_SIZE SZ_1G
#define CONFIG_SYS_INIT_RAM_SIZE 0x00100000
#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_SDRAM_BASE + \
CONFIG_SYS_INIT_RAM_SIZE - \
GENERATED_GBL_DATA_SIZE)
#define CONFIG_SYS_INIT_SP_ADDR CONFIG_SYS_GBL_DATA_OFFSET
/* FIXME: This should be loaded from device tree... */
#define CONFIG_SYS_L2_PL310
#define CONFIG_SYS_PL310_BASE 0xa0412000
#define CONFIG_SYS_LOAD_ADDR 0x00100000
#endif

View file

@ -0,0 +1,15 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2014 Linaro Ltd.
*
* Author: Ulf Hansson <ulf.hansson@linaro.org>
*/
#ifndef _DT_BINDINGS_ARM_UX500_PM_DOMAINS_H
#define _DT_BINDINGS_ARM_UX500_PM_DOMAINS_H
#define DOMAIN_VAPE 0
/* Number of PM domains. */
#define NR_DOMAINS (DOMAIN_VAPE + 1)
#endif

View file

@ -0,0 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __STE_CLK_AB8500_H__
#define __STE_CLK_AB8500_H__
#define AB8500_SYSCLK_BUF2 0
#define AB8500_SYSCLK_BUF3 1
#define AB8500_SYSCLK_BUF4 2
#define AB8500_SYSCLK_ULP 3
#define AB8500_SYSCLK_INT 4
#define AB8500_SYSCLK_AUDIO 5
#endif

View file

@ -0,0 +1,84 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* This header provides constants for the PRCMU bindings.
*
*/
#ifndef _DT_BINDINGS_MFD_PRCMU_H
#define _DT_BINDINGS_MFD_PRCMU_H
/*
* Clock identifiers.
*/
#define ARMCLK 0
#define PRCMU_ACLK 1
#define PRCMU_SVAMMCSPCLK 2
#define PRCMU_SDMMCHCLK 2 /* DBx540 only. */
#define PRCMU_SIACLK 3
#define PRCMU_SIAMMDSPCLK 3 /* DBx540 only. */
#define PRCMU_SGACLK 4
#define PRCMU_UARTCLK 5
#define PRCMU_MSP02CLK 6
#define PRCMU_MSP1CLK 7
#define PRCMU_I2CCLK 8
#define PRCMU_SDMMCCLK 9
#define PRCMU_SLIMCLK 10
#define PRCMU_CAMCLK 10 /* DBx540 only. */
#define PRCMU_PER1CLK 11
#define PRCMU_PER2CLK 12
#define PRCMU_PER3CLK 13
#define PRCMU_PER5CLK 14
#define PRCMU_PER6CLK 15
#define PRCMU_PER7CLK 16
#define PRCMU_LCDCLK 17
#define PRCMU_BMLCLK 18
#define PRCMU_HSITXCLK 19
#define PRCMU_HSIRXCLK 20
#define PRCMU_HDMICLK 21
#define PRCMU_APEATCLK 22
#define PRCMU_APETRACECLK 23
#define PRCMU_MCDECLK 24
#define PRCMU_IPI2CCLK 25
#define PRCMU_DSIALTCLK 26
#define PRCMU_DMACLK 27
#define PRCMU_B2R2CLK 28
#define PRCMU_TVCLK 29
#define SPARE_UNIPROCLK 30
#define PRCMU_SSPCLK 31
#define PRCMU_RNGCLK 32
#define PRCMU_UICCCLK 33
#define PRCMU_G1CLK 34 /* DBx540 only. */
#define PRCMU_HVACLK 35 /* DBx540 only. */
#define PRCMU_SPARE1CLK 36
#define PRCMU_SPARE2CLK 37
#define PRCMU_NUM_REG_CLOCKS 38
#define PRCMU_RTCCLK PRCMU_NUM_REG_CLOCKS
#define PRCMU_SYSCLK 39
#define PRCMU_CDCLK 40
#define PRCMU_TIMCLK 41
#define PRCMU_PLLSOC0 42
#define PRCMU_PLLSOC1 43
#define PRCMU_ARMSS 44
#define PRCMU_PLLDDR 45
/* DSI Clocks */
#define PRCMU_PLLDSI 46
#define PRCMU_DSI0CLK 47
#define PRCMU_DSI1CLK 48
#define PRCMU_DSI0ESCCLK 49
#define PRCMU_DSI1ESCCLK 50
#define PRCMU_DSI2ESCCLK 51
/* LCD DSI PLL - Ux540 only */
#define PRCMU_PLLDSI_LCD 52
#define PRCMU_DSI0CLK_LCD 53
#define PRCMU_DSI1CLK_LCD 54
#define PRCMU_DSI0ESCCLK_LCD 55
#define PRCMU_DSI1ESCCLK_LCD 56
#define PRCMU_DSI2ESCCLK_LCD 57
#define PRCMU_NUM_CLKS 58
#endif

1
lib/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
oid_registry_data.c

View file

@ -130,13 +130,13 @@ static void __attribute__((no_instrument_function)) add_textbase(void)
}
/**
* This is called on every function entry
* __cyg_profile_func_enter() - record function entry
*
* We add to our tally for this function and add to the list of called
* functions.
*
* @param func_ptr Pointer to function being entered
* @param caller Pointer to function which called this function
* @func_ptr: pointer to function being entered
* @caller: pointer to function which called this function
*/
void __attribute__((no_instrument_function)) __cyg_profile_func_enter(
void *func_ptr, void *caller)
@ -161,12 +161,10 @@ void __attribute__((no_instrument_function)) __cyg_profile_func_enter(
}
/**
* This is called on every function exit
* __cyg_profile_func_exit() - record function exit
*
* We do nothing here.
*
* @param func_ptr Pointer to function being entered
* @param caller Pointer to function which called this function
* @func_ptr: pointer to function being entered
* @caller: pointer to function which called this function
*/
void __attribute__((no_instrument_function)) __cyg_profile_func_exit(
void *func_ptr, void *caller)
@ -180,16 +178,16 @@ void __attribute__((no_instrument_function)) __cyg_profile_func_exit(
}
/**
* Produce a list of called functions
* trace_list_functions() - produce a list of called functions
*
* The information is written into the supplied buffer - a header followed
* by a list of function records.
*
* @param buff Buffer to place list into
* @param buff_size Size of buffer
* @param needed Returns size of buffer needed, which may be
* greater than buff_size if we ran out of space.
* @return 0 if ok, -1 if space was exhausted
* @buff: buffer to place list into
* @buff_size: size of buffer
* @needed: returns size of buffer needed, which may be
* greater than buff_size if we ran out of space.
* Return: 0 if ok, -ENOSPC if space was exhausted
*/
int trace_list_functions(void *buff, size_t buff_size, size_t *needed)
{
@ -236,6 +234,18 @@ int trace_list_functions(void *buff, size_t buff_size, size_t *needed)
return 0;
}
/**
* trace_list_functions() - produce a list of function calls
*
* The information is written into the supplied buffer - a header followed
* by a list of function records.
*
* @buff: buffer to place list into
* @buff_size: size of buffer
* @needed: returns size of buffer needed, which may be
* greater than buff_size if we ran out of space.
* Return: 0 if ok, -ENOSPC if space was exhausted
*/
int trace_list_calls(void *buff, size_t buff_size, size_t *needed)
{
struct trace_output_hdr *output_hdr = NULL;
@ -281,7 +291,9 @@ int trace_list_calls(void *buff, size_t buff_size, size_t *needed)
return 0;
}
/* Print basic information about tracing */
/**
* trace_print_stats() - print basic information about tracing
*/
void trace_print_stats(void)
{
ulong count;
@ -320,10 +332,11 @@ void __attribute__((no_instrument_function)) trace_set_enabled(int enabled)
}
/**
* Init the tracing system ready for used, and enable it
* trace_init() - initialize the tracing system and enable it
*
* @param buff Pointer to trace buffer
* @param buff_size Size of trace buffer
* @buff: Pointer to trace buffer
* @buff_size: Size of trace buffer
* Return: 0 if ok
*/
int __attribute__((no_instrument_function)) trace_init(void *buff,
size_t buff_size)
@ -385,6 +398,11 @@ int __attribute__((no_instrument_function)) trace_init(void *buff,
}
#ifdef CONFIG_TRACE_EARLY
/**
* trace_early_init() - initialize the tracing system for early tracing
*
* Return: 0 if ok, -ENOSPC if not enough memory is available
*/
int __attribute__((no_instrument_function)) trace_early_init(void)
{
ulong func_count = gd->mon_len / FUNC_SITE_SIZE;

View file

@ -939,8 +939,7 @@ CONFIG_KM_KIRKWOOD_PCI
CONFIG_KM_NEW_ENV
CONFIG_KM_NUSA
CONFIG_KM_ROOTFSSIZE
CONFIG_KM_SUGP1
CONFIG_KM_SUV31
CONFIG_KM_SUSE2
CONFIG_KM_UBI_LINUX_MTD
CONFIG_KM_UBI_PARTITION_NAME_APP
CONFIG_KM_UBI_PARTITION_NAME_BOOT