mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-02 01:19:49 +00:00
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:
commit
2c871f9e08
71 changed files with 3255 additions and 244 deletions
17
MAINTAINERS
17
MAINTAINERS
|
@ -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
|
||||
|
|
2
Makefile
2
Makefile
|
@ -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 \
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
217
arch/arm/dts/bcm68360.dtsi
Normal 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";
|
||||
};
|
||||
};
|
||||
};
|
168
arch/arm/dts/bcm968360bg.dts
Normal file
168
arch/arm/dts/bcm968360bg.dts
Normal 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>;
|
||||
};
|
||||
};
|
328
arch/arm/dts/ste-ab8500.dtsi
Normal file
328
arch/arm/dts/ste-ab8500.dtsi
Normal 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>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
275
arch/arm/dts/ste-ab8505.dtsi
Normal file
275
arch/arm/dts/ste-ab8505.dtsi
Normal 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>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
29
arch/arm/dts/ste-dbx5x0-u-boot.dtsi
Normal file
29
arch/arm/dts/ste-dbx5x0-u-boot.dtsi
Normal 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
1144
arch/arm/dts/ste-dbx5x0.dtsi
Normal file
File diff suppressed because it is too large
Load diff
20
arch/arm/dts/ste-ux500-samsung-stemmy.dts
Normal file
20
arch/arm/dts/ste-ux500-samsung-stemmy.dts
Normal 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";
|
||||
};
|
||||
};
|
||||
};
|
|
@ -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>
|
||||
|
|
27
arch/arm/mach-u8500/Kconfig
Normal file
27
arch/arm/mach-u8500/Kconfig
Normal 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
|
4
arch/arm/mach-u8500/Makefile
Normal file
4
arch/arm/mach-u8500/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
obj-y += cache.o
|
||||
obj-$(CONFIG_DISPLAY_CPUINFO) += cpuinfo.o
|
37
arch/arm/mach-u8500/cache.c
Normal file
37
arch/arm/mach-u8500/cache.c
Normal 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
|
25
arch/arm/mach-u8500/cpuinfo.c
Normal file
25
arch/arm/mach-u8500/cpuinfo.c
Normal 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;
|
||||
}
|
17
board/broadcom/bcm968360bg/Kconfig
Normal file
17
board/broadcom/bcm968360bg/Kconfig
Normal 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
|
6
board/broadcom/bcm968360bg/MAINTAINERS
Normal file
6
board/broadcom/bcm968360bg/MAINTAINERS
Normal 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
|
3
board/broadcom/bcm968360bg/Makefile
Normal file
3
board/broadcom/bcm968360bg/Makefile
Normal file
|
@ -0,0 +1,3 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
obj-y += bcm968360bg.o
|
61
board/broadcom/bcm968360bg/bcm968360bg.c
Normal file
61
board/broadcom/bcm968360bg/bcm968360bg.c
Normal 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;
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
40
board/keymile/common/qrio.h
Normal file
40
board/keymile/common/qrio.h
Normal 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 */
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
12
board/ste/stemmy/Kconfig
Normal 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
|
6
board/ste/stemmy/MAINTAINERS
Normal file
6
board/ste/stemmy/MAINTAINERS
Normal 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
|
2
board/ste/stemmy/Makefile
Normal file
2
board/ste/stemmy/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
obj-y := stemmy.o
|
49
board/ste/stemmy/README
Normal file
49
board/ste/stemmy/README
Normal 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
18
board/ste/stemmy/stemmy.c
Normal 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;
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
53
configs/bcm968360bg_ram_defconfig
Normal file
53
configs/bcm968360bg_ram_defconfig
Normal 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
|
|
@ -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
|
|
@ -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
18
configs/stemmy_defconfig
Normal 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
|
13
disk/part.c
13
disk/part.c
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
123
drivers/mtd/nand/raw/brcmnand/bcm68360_nand.c
Normal file
123
drivers/mtd/nand/raw/brcmnand/bcm68360_nand.c
Normal 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);
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
114
drivers/timer/nomadik-mtu-timer.c
Normal file
114
drivers/timer/nomadik-mtu-timer.c
Normal 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,
|
||||
};
|
|
@ -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
3
env/Kconfig
vendored
|
@ -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
13
env/Makefile
vendored
|
@ -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
|
||||
|
|
40
include/configs/broadcom_bcm968360bg.h
Normal file
40
include/configs/broadcom_bcm968360bg.h
Normal 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
|
||||
*/
|
|
@ -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"\
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
29
include/configs/stemmy.h
Normal 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
|
15
include/dt-bindings/arm/ux500_pm_domains.h
Normal file
15
include/dt-bindings/arm/ux500_pm_domains.h
Normal 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
|
12
include/dt-bindings/clock/ste-ab8500.h
Normal file
12
include/dt-bindings/clock/ste-ab8500.h
Normal 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
|
84
include/dt-bindings/mfd/dbx500-prcmu.h
Normal file
84
include/dt-bindings/mfd/dbx500-prcmu.h
Normal 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
1
lib/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
oid_registry_data.c
|
54
lib/trace.c
54
lib/trace.c
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue