Add more hisilicon platform

pull/3/head
Igor Zalatov 2021-04-18 09:22:48 +03:00
parent c9bd09845a
commit 70d0a85852
69 changed files with 1183597 additions and 0 deletions

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,238 @@
/*
* Copyright (c) 2013-2014 Linaro Ltd.
* Copyright (c) 2015-2017 HiSilicon Technologies Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/dts-v1/;
#include "hi3516a.dtsi"
/ {
model = "Hisilicon HI3516A DEMO Board";
compatible = "hiSilicon,hi3516a";
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0>;
operating-points = <
/* KHz uV */
600000 1100000
732000 1200000
850000 1300000
500000 1060000
400000 1020000
>;
clocks = <&clock HI3516A_A7_MUX>,
<&clock HI3516A_FIXED_400M>,
<&clock HI3516A_FIXED_500M>,
<&clock HI3516A_APLL_CLK>;
clock-names = "a7_mux","400m", "500m","apll";
vcc-supply = <&a7_regulator>;
};
};
avs {
compatible = "hi3516a,avs";
avs-num = <2>;
avs-name-array = "cpu-avs","media-avs";
cpu_avs: cpu_avs{
avs-name = "cpu-avs";
opp-num = <5>;
opp-freq = <600000 732000 850000 500000 400000>;
opp-volt-min = <940000 1000000 1070000 940000 940000>;
opp-hpm = <270 325 365 255 240>;
opp-div = <11 14 16 10 8>;
opp-volt-max = <1310000>;
};
media_avs: media_avs{
avs-name = "media-avs";
opp-num = <5>;
opp-freq = <0 1 2 3 4>;
opp-volt-min = <930000 930000 930000 930000 930000>;
opp-hpm = <245 245 245 260 285>;
opp-div = <3 3 4 5 5>;
opp-volt-max = <1310000>;
};
};
memory {
device_type = "memory";
reg = <0x80000000 0x40000000>;
};
};
&uart0 {
status = "okay";
};
&dual_timer0 {
status = "okay";
};
&hidmac {
status = "okay";
};
&i2c_bus0 {
status = "okay";
};
&i2c_bus1 {
status = "okay";
};
&i2c_bus2 {
status = "okay";
};
&spi_bus0{
status = "okay";
num-cs = <1>;
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com_mode = <0>;
spi-max-frequency = <24000000>;
};
};
&spi_bus1{
status = "okay";
num-cs = <3>;
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com_mode = <0>;
spi-max-frequency = <24000000>;
};
spidev@1 {
compatible = "rohm,dh2228fv";
reg = <1>;
pl022,interface = <0>;
pl022,com_mode = <0>;
spi-max-frequency = <24000000>;
};
spidev@2 {
compatible = "rohm,dh2228fv";
reg = <2>;
pl022,interface = <0>;
pl022,com_mode = <0>;
spi-max-frequency = <24000000>;
};
};
&mdio {
ethphy: ethernet-phy@1 {
reg = <1>;
};
};
&higmac {
phy-handle = <&ethphy>;
phy-mode = "rmii";
};
&mmc0 {
status = "okay";
};
&mmc1 {
status = "okay";
};
&gpio_chip0 {
status = "okay";
};
&gpio_chip1 {
status = "okay";
};
&gpio_chip2 {
status = "okay";
};
&gpio_chip3 {
status = "okay";
};
&gpio_chip4 {
status = "okay";
};
&gpio_chip5 {
status = "okay";
};
&gpio_chip6 {
status = "okay";
};
&gpio_chip7 {
status = "okay";
};
&gpio_chip8 {
status = "okay";
};
&gpio_chip9 {
status = "okay";
};
&gpio_chip10 {
status = "okay";
};
&gpio_chip11 {
status = "okay";
};
&gpio_chip12 {
status = "okay";
};
&gpio_chip13 {
status = "okay";
};
&gpio_chip14 {
status = "okay";
};
&gpio_chip15 {
status = "okay";
};

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,247 @@
/*
* Copyright (c) 2013-2014 Linaro Ltd.
* Copyright (c) 2015 HiSilicon Technologies Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/dts-v1/;
#include "hisi-hi3519v101.dtsi"
/ {
model = "Hisilicon HI3519V101 DEMO Board";
compatible = "hisilicon,hi3519v101";
cpus {
#address-cells = <1>;
#size-cells = <0>;
enable-method = "hisilicon,hi3519-smp";
cpu@0 {
compatible = "arm,cortex-a7";
device_type = "cpu";
clock-frequency = <HI3519_FIXED_792M>;
reg = <0>;
cci-control-port = <&cci_control0>;
};
/*cpu@100 {
compatible = "arm,cortex-a17";
device_type = "cpu";
clock-frequency = <HI3519_FIXED_1000M>;
reg = <0x100>;
cci-control-port = <&cci_control1>;
};*/
};
memory {
device_type = "memory";
reg = <0x80000000 0x40000000>;
};
};
&uart0 {
status = "okay";
};
&dual_timer0 {
status = "okay";
};
&i2c_bus0 {
status = "okay";
};
&i2c_bus1 {
status = "okay";
};
&i2c_bus2 {
status = "okay";
};
&i2c_bus3 {
status = "okay";
};
&spi_bus0 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24750000>;
};
};
&spi_bus1 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24750000>;
};
};
&spi_bus2 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24750000>;
};
spidev@1 {
compatible = "rohm,dh2228fv";
reg = <1>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24750000>;
};
};
&spi_bus3 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24750000>;
};
};
&hisfc {
hi_sfc {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <160000000>;
m25p,fast-read;
};
};
&hisnfc {
hinand {
compatible = "jedec,spi-nand";
reg = <0>;
spi-max-frequency = <160000000>;
};
};
&hinfc {
hinand {
compatible = "jedec,nand";
reg = <0>;
nand-max-frequency = <200000000>;
};
};
&mmc0 {
status = "okay";
};
&mmc1 {
status = "okay";
};
&mmc2 {
status = "okay";
};
&mdio {
ethphy: ethernet-phy@1 {
reg = <1>;
};
};
&higmac {
phy-handle = <&ethphy>;
phy-mode = "rmii";
};
&gpio_chip0 {
status = "okay";
};
&gpio_chip1 {
status = "okay";
};
&gpio_chip2 {
status = "okay";
};
&gpio_chip3 {
status = "okay";
};
&gpio_chip4 {
status = "okay";
};
&gpio_chip5 {
status = "okay";
};
&gpio_chip6 {
status = "okay";
};
&gpio_chip7 {
status = "okay";
};
&gpio_chip8 {
status = "okay";
};
&gpio_chip9 {
status = "okay";
};
&gpio_chip10 {
status = "okay";
};
&gpio_chip11 {
status = "okay";
};
&gpio_chip12 {
status = "okay";
};
&gpio_chip13 {
status = "okay";
};
&gpio_chip14 {
status = "okay";
};
&gpio_chip16 {
status = "okay";
};

View File

@ -0,0 +1,310 @@
/*
* Copyright (c) 2013-2014 Linaro Ltd.
* Copyright (c) 2015 HiSilicon Technologies Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/dts-v1/;
#include "hisi-hi3519v101.dtsi"
/ {
model = "Hisilicon HI3519V101 DEMO Board";
compatible = "hisilicon,hi3519v101";
chosen {
bootargs = "console=ttyAMA0,115200 early_printk
root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),
4M(kernel),11M(rootfs)";
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
enable-method = "hisilicon,hi3519-smp";
cpu@0 {
compatible = "arm,cortex-a7";
device_type = "cpu";
clock-frequency = <HI3519_FIXED_792M>;
reg = <0>;
cci-control-port = <&cci_control0>;
};
cpu@100 {
compatible = "arm,cortex-a17";
device_type = "cpu";
reg = <0x100>;
cci-control-port = <&cci_control1>;
operating-points = <
/* KHz uV */
1250000 1060000
1150000 1060000
1000000 1000000
930000 1000000
792000 940000
594000 940000
>;
clocks = <&clock HI3519_A17_MUX>,
<&clock HI3519_FIXED_400M>,
<&clock HI3519_FIXED_500M>,
<&clock HI3519_FIXED_594M>,
<&clock HI3519_FIXED_792M>,
<&clock HI3519_APLL_CLK>;
clock-names = "a17_mux","400m", "500m",
"594m", "792m", "apll";
vcc-supply = <&a17_regulator>;
};
};
avs {
compatible = "hi3519,avs";
avs-num = <2>;
avs-name-array = "cpu-avs","media-avs";
cpu_avs: cpu_avs{
avs-name = "cpu-avs";
opp-num = <6>;
opp-freq = <1250000 1150000 1000000 930000 792000 594000 >;
opp-volt-min = <870000 870000 800000 800000 740000 740000>;
opp-hpm = <310 310 280 280 250 250>;
opp-div = <24 22 19 18 15 11>;
opp-volt-max = <1060000>;
};
media_avs: media_avs{
avs-name = "media-avs";
opp-num = <4>;
opp-prof-num = <2>;
opp-temp-num = <2>;
opp-temp = <50 200>;
opp-freq = <1 2 3 4>;
opp-volt-min = <
/* profile2 profile3*/
770000 770000
770000 770000
>;
opp-hpm = <
/* profile2 profile3*/
210 215
190 215
>;
opp-div = <3 3 3 3>;
opp-volt-max = <
/* profile2 profile3*/
977000 977000
977000 977000
>;
};
};
memory {
device_type = "memory";
reg = <0x80000000 0x40000000>;
};
};
&uart0 {
status = "okay";
};
&dual_timer0 {
status = "okay";
};
&i2c_bus0 {
status = "okay";
};
&i2c_bus1 {
status = "okay";
};
&i2c_bus2 {
status = "okay";
};
&i2c_bus3 {
status = "okay";
};
&spi_bus0 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24000000>;
};
};
&spi_bus1 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24000000>;
};
spidev@1 {
compatible = "rohm,dh2228fv";
reg = <1>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24000000>;
};
};
&spi_bus2 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24000000>;
};
};
&spi_bus3 {
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
reg = <0>;
pl022,interface = <0>;
pl022,com-mode = <0>;
spi-max-frequency = <24000000>;
};
};
&hisfc {
hi_sfc {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <160000000>;
m25p,fast-read;
};
};
&hisnfc {
hinand {
compatible = "jedec,spi-nand";
reg = <0>;
spi-max-frequency = <160000000>;
};
};
&hinfc {
hinand {
compatible = "jedec,nand";
reg = <0>;
nand-max-frequency = <200000000>;
};
};
&mmc0 {
status = "okay";
};
&mmc1 {
status = "okay";
};
&mmc2 {
status = "okay";
};
&mdio {
ethphy: ethernet-phy@1 {
reg = <1>;
};
};
&higmac {
compatible = "hisilicon,higmac-v3", "hisilicon,higmac";
phy-handle = <&ethphy>;
phy-mode = "rmii";
};
&gpio_chip0 {
status = "okay";
};
&gpio_chip1 {
status = "okay";
};
&gpio_chip2 {
status = "okay";
};
&gpio_chip3 {
status = "okay";
};
&gpio_chip4 {
status = "okay";
};
&gpio_chip5 {
status = "okay";
};
&gpio_chip6 {
status = "okay";
};
&gpio_chip7 {
status = "okay";
};
&gpio_chip8 {
status = "okay";
};
&gpio_chip9 {
status = "okay";
};
&gpio_chip10 {
status = "okay";
};
&gpio_chip11 {
status = "okay";
};
&gpio_chip12 {
status = "okay";
};
&gpio_chip13 {
status = "okay";
};
&gpio_chip14 {
status = "okay";
};
&gpio_chip16 {
status = "okay";
};

View File

@ -0,0 +1,207 @@
/*
* power mangager control for hisilicon hi3516av200 soc
*
* Copyright (c) 2015 HiSilicon Technologies Co., Ltd.
* Authors: zengtao@hisilicon.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <linux/io.h>
#include <linux/linkage.h>
#include <linux/bug.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/resource.h>
#include <mach/platform.h>
#include <linux/delay.h>
#define PERI_PMC77 (0x134)
#define PERI_PMC79 (0x13c)
#define PERI_PMC85 (0x154)
static void __iomem *pmc_base;
static u32 __attribute__((used)) pmc_phys_addr;
#define PMC_ADDRESS(reg) (pmc_base + reg)
/* set bitfield of reg from start bit to end - 1 bit */
static void reg_bit_set(u32 reg, u32 start, u32 end, u32 val)
{
u32 regval, mask;
regval = readl((void __iomem *)PMC_ADDRESS(reg));
mask = ((0xffffffff << (32 - start)) >> (32 - start))
| ((0xffffffff >> end) << end);
regval &= mask;
regval |= (val << start);
writel(regval, (void __iomem *)PMC_ADDRESS(reg));
}
/* get bitfield of reg from start bit to end - 1 bit */
static u32 reg_bit_get(u32 reg, u32 start, u32 end)
{
u32 regval;
regval = readl((void __iomem *)PMC_ADDRESS(reg));
regval = (regval << (32 - end)) >> (32 - end);
regval = regval >> start;
return regval;
}
void hi_pmc_power_up_done(void)
{
writel(0, (void __iomem *)PMC_ADDRESS(PERI_PMC85));
writel(1, (void __iomem *)PMC_ADDRESS(PERI_PMC85));
}
/* before power down set ac inactive */
void hi_pmc_set_ac_inactive(void)
{
reg_bit_set(PERI_PMC79, 8, 9, 1);
}
/* after powerup clear ac inactive */
void hi_pmc_clear_ac_inactive(void)
{
reg_bit_set(PERI_PMC79, 8, 9, 0);
}
EXPORT_SYMBOL(hi_pmc_clear_ac_inactive);
/* call from assable context */
asmlinkage void __naked hi_pmc_clear_a17_ac(void)
{
asm volatile("\n"
"adr r2, 1f\n"
"ldmia r2, {r1, r3}\n"
"sub r0, r2, r1\n"
"ldr r2, [r0, r3]\n"
"ldr r0, ="__stringify(PERI_PMC79)"\n"
"add r0, r0, r2\n"
"ldr r1, [r0]\n"
"bic r1, #0x100\n"
"str r1, [r0]\n"
"mov r0, #0\n"
"bx lr\n"
".align 2\n"
"1: .word .\n"
" .word pmc_phys_addr\n"
);
unreachable();
}
static void hi_pmc_config(void)
{
/* enable pmc timeout */
reg_bit_set(PERI_PMC77, 12, 13, 1);
/* enable pmc auto mode */
reg_bit_set(PERI_PMC79, 0, 2, 0);
/* enable irq triger source power on */
reg_bit_set(PERI_PMC79, 7, 8, 1);
}
/* cpu hotplug powerup */
void hi_pmc_power_up(void)
{
u32 power_state;
hi_pmc_config();
/* make sure it powerup state when power up */
power_state = reg_bit_get(PERI_PMC79, 12, 16);
BUG_ON(power_state != 0);
/* disable interrupt wakeup */
reg_bit_set(PERI_PMC79, 5, 6, 0);
/* power on */
reg_bit_set(PERI_PMC79, 3, 4, 0);
reg_bit_set(PERI_PMC79, 3, 4, 1);
}
/* cpu hotplug powerdown */
void hi_pmc_power_down(void)
{
u32 power_state;
power_state = reg_bit_get(PERI_PMC79, 12, 16);
BUG_ON(power_state != 6);
/* disable interrupt wakeup */
reg_bit_set(PERI_PMC79, 5, 6, 0);
/* power off */
reg_bit_set(PERI_PMC79, 4, 5, 0);
reg_bit_set(PERI_PMC79, 4, 5, 1);
}
/* cpuidle powerdown */
void hi_pmc_automode_power_down(void)
{
u32 power_state;
power_state = reg_bit_get(PERI_PMC79, 12, 16);
BUG_ON(power_state != 6);
/* enable interrupt wakeup */
reg_bit_set(PERI_PMC79, 5, 6, 1);
/* power off */
reg_bit_set(PERI_PMC79, 4, 5, 0);
reg_bit_set(PERI_PMC79, 4, 5, 1);
}
EXPORT_SYMBOL(hi_pmc_automode_power_down);
/* enable timeout */
static int hi_pmc_init(void)
{
struct device_node *np;
struct resource res;
int ret = -ENODEV;
np = of_find_compatible_node(NULL, NULL, "hisilicon,pmc");
if (!np)
goto err;
pmc_base = of_iomap(np, 0);
if (!pmc_base) {
pr_err("failed to map pmc base\n");
ret = -ENOMEM;
goto err;
}
ret = of_address_to_resource(np, 0, &res);
if (ret) {
pr_err("failed to get pmc base phys\n");
ret = -ENOMEM;
goto err;
}
pmc_phys_addr = res.start;
err:
return ret;
}
early_initcall(hi_pmc_init);

View File

@ -0,0 +1,207 @@
/*
* power mangager control for hisilicon hi3519 soc
*
* Copyright (c) 2015 HiSilicon Technologies Co., Ltd.
* Authors: zengtao@hisilicon.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <linux/io.h>
#include <linux/linkage.h>
#include <linux/bug.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/resource.h>
#include <mach/platform.h>
#include <linux/delay.h>
#define PERI_PMC77 (0x134)
#define PERI_PMC79 (0x13c)
#define PERI_PMC85 (0x154)
static void __iomem *pmc_base;
static u32 __attribute__((used)) pmc_phys_addr;
#define PMC_ADDRESS(reg) (pmc_base + reg)
/* set bitfield of reg from start bit to end - 1 bit */
static void reg_bit_set(u32 reg, u32 start, u32 end, u32 val)
{
u32 regval, mask;
regval = readl((void __iomem *)PMC_ADDRESS(reg));
mask = ((0xffffffff << (32 - start)) >> (32 - start))
| ((0xffffffff >> end) << end);
regval &= mask;
regval |= (val << start);
writel(regval, (void __iomem *)PMC_ADDRESS(reg));
}
/* get bitfield of reg from start bit to end - 1 bit */
static u32 reg_bit_get(u32 reg, u32 start, u32 end)
{
u32 regval;
regval = readl((void __iomem *)PMC_ADDRESS(reg));
regval = (regval << (32 - end)) >> (32 - end);
regval = regval >> start;
return regval;
}
void hi_pmc_power_up_done(void)
{
writel(0, (void __iomem *)PMC_ADDRESS(PERI_PMC85));
writel(1, (void __iomem *)PMC_ADDRESS(PERI_PMC85));
}
/* before power down set ac inactive */
void hi_pmc_set_ac_inactive(void)
{
reg_bit_set(PERI_PMC79, 8, 9, 1);
}
/* after powerup clear ac inactive */
void hi_pmc_clear_ac_inactive(void)
{
reg_bit_set(PERI_PMC79, 8, 9, 0);
}
EXPORT_SYMBOL(hi_pmc_clear_ac_inactive);
/* call from assable context */
asmlinkage void __naked hi_pmc_clear_a17_ac(void)
{
asm volatile("\n"
"adr r2, 1f\n"
"ldmia r2, {r1, r3}\n"
"sub r0, r2, r1\n"
"ldr r2, [r0, r3]\n"
"ldr r0, ="__stringify(PERI_PMC79)"\n"
"add r0, r0, r2\n"
"ldr r1, [r0]\n"
"bic r1, #0x100\n"
"str r1, [r0]\n"
"mov r0, #0\n"
"bx lr\n"
".align 2\n"
"1: .word .\n"
" .word pmc_phys_addr\n"
);
unreachable();
}
static void hi_pmc_config(void)
{
/* enable pmc timeout */
reg_bit_set(PERI_PMC77, 12, 13, 1);
/* enable pmc auto mode */
reg_bit_set(PERI_PMC79, 0, 2, 0);
/* enable irq triger source power on */
reg_bit_set(PERI_PMC79, 7, 8, 1);
}
/* cpu hotplug powerup */
void hi_pmc_power_up(void)
{
u32 power_state;
hi_pmc_config();
/* make sure it powerup state when power up */
power_state = reg_bit_get(PERI_PMC79, 12, 16);
BUG_ON(power_state != 0);
/* disable interrupt wakeup */
reg_bit_set(PERI_PMC79, 5, 6, 0);
/* power on */
reg_bit_set(PERI_PMC79, 3, 4, 0);
reg_bit_set(PERI_PMC79, 3, 4, 1);
}
/* cpu hotplug powerdown */
void hi_pmc_power_down(void)
{
u32 power_state;
power_state = reg_bit_get(PERI_PMC79, 12, 16);
BUG_ON(power_state != 6);
/* disable interrupt wakeup */
reg_bit_set(PERI_PMC79, 5, 6, 0);
/* power off */
reg_bit_set(PERI_PMC79, 4, 5, 0);
reg_bit_set(PERI_PMC79, 4, 5, 1);
}
/* cpuidle powerdown */
void hi_pmc_automode_power_down(void)
{
u32 power_state;
power_state = reg_bit_get(PERI_PMC79, 12, 16);
BUG_ON(power_state != 6);
/* enable interrupt wakeup */
reg_bit_set(PERI_PMC79, 5, 6, 1);
/* power off */
reg_bit_set(PERI_PMC79, 4, 5, 0);
reg_bit_set(PERI_PMC79, 4, 5, 1);
}
EXPORT_SYMBOL(hi_pmc_automode_power_down);
/* enable timeout */
static int hi_pmc_init(void)
{
struct device_node *np;
struct resource res;
int ret = -ENODEV;
np = of_find_compatible_node(NULL, NULL, "hisilicon,pmc");
if (!np)
goto err;
pmc_base = of_iomap(np, 0);
if (!pmc_base) {
pr_err("failed to map pmc base\n");
ret = -ENOMEM;
goto err;
}
ret = of_address_to_resource(np, 0, &res);
if (ret) {
pr_err("failed to get pmc base phys\n");
ret = -ENOMEM;
goto err;
}
pmc_phys_addr = res.start;
err:
return ret;
}
early_initcall(hi_pmc_init);

View File

@ -0,0 +1,65 @@
#ifndef __LINUX_COMPILER_H
#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
#endif
#define __used __attribute__((__used__))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
/* Mark functions as cold. gcc will assume any path leading to a call
to them will be unlikely. This means a lot of manual unlikely()s
are unnecessary now for any paths leading to the usual suspects
like BUG(), printk(), panic() etc. [but let's keep them for now for
older compilers]
Early snapshots of gcc 4.3 don't support this and we can't detect this
in the preprocessor, but we can live with this because they're unreleased.
Maketime probing would be overkill here.
gcc also has a __attribute__((__hot__)) to move hot functions into
a special section, but I don't see any sense in this right now in
the kernel context */
#define __cold __attribute__((__cold__))
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
#ifndef __CHECKER__
# define __compiletime_warning(message) __attribute__((warning(message)))
# define __compiletime_error(message) __attribute__((error(message)))
#endif /* __CHECKER__ */
/*
* Mark a position in code as unreachable. This can be used to
* suppress control flow warnings after asm blocks that transfer
* control elsewhere.
*
* Early snapshots of gcc 4.5 don't support this and we can't detect
* this in the preprocessor, but we can live with this because they're
* unreleased. Really, we need to have autoconf for the kernel.
*/
#define unreachable() __builtin_unreachable()
/* Mark a function definition as prohibited from being cloned. */
#define __noclone __attribute__((__noclone__))
/*
* Tell the optimizer that something else uses this function or variable.
*/
#define __visible __attribute__((externally_visible))
/*
* GCC 'asm goto' miscompiles certain code sequences:
*
* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
*
* Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
*
* (asm goto is automatically volatile - the naming reflects this.)
*/
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
#define __HAVE_BUILTIN_BSWAP32__
#define __HAVE_BUILTIN_BSWAP64__
#define __HAVE_BUILTIN_BSWAP16__
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */

View File

@ -0,0 +1,65 @@
#ifndef __LINUX_COMPILER_H
#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
#endif
#define __used __attribute__((__used__))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
/* Mark functions as cold. gcc will assume any path leading to a call
to them will be unlikely. This means a lot of manual unlikely()s
are unnecessary now for any paths leading to the usual suspects
like BUG(), printk(), panic() etc. [but let's keep them for now for
older compilers]
Early snapshots of gcc 4.3 don't support this and we can't detect this
in the preprocessor, but we can live with this because they're unreleased.
Maketime probing would be overkill here.
gcc also has a __attribute__((__hot__)) to move hot functions into
a special section, but I don't see any sense in this right now in
the kernel context */
#define __cold __attribute__((__cold__))
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
#ifndef __CHECKER__
# define __compiletime_warning(message) __attribute__((warning(message)))
# define __compiletime_error(message) __attribute__((error(message)))
#endif /* __CHECKER__ */
/*
* Mark a position in code as unreachable. This can be used to
* suppress control flow warnings after asm blocks that transfer
* control elsewhere.
*
* Early snapshots of gcc 4.5 don't support this and we can't detect
* this in the preprocessor, but we can live with this because they're
* unreleased. Really, we need to have autoconf for the kernel.
*/
#define unreachable() __builtin_unreachable()
/* Mark a function definition as prohibited from being cloned. */
#define __noclone __attribute__((__noclone__))
/*
* Tell the optimizer that something else uses this function or variable.
*/
#define __visible __attribute__((externally_visible))
/*
* GCC 'asm goto' miscompiles certain code sequences:
*
* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
*
* Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
*
* (asm goto is automatically volatile - the naming reflects this.)
*/
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
#define __HAVE_BUILTIN_BSWAP32__
#define __HAVE_BUILTIN_BSWAP64__
#define __HAVE_BUILTIN_BSWAP16__
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,130 @@
/*
* linux/arch/arm/lib/memset.S
*
* Copyright (C) 1995-2000 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* ASM optimised string functions
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
.text
.align 5
.word 0
1: subs r2, r2, #4 @ 1 do we have enough
blt 5f @ 1 bytes to align with?
cmp r3, #2 @ 1
strltb r1, [ip], #1 @ 1
strleb r1, [ip], #1 @ 1
strb r1, [ip], #1 @ 1
add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
/*
* The pointer is now aligned and the length is adjusted. Try doing the
* memset again.
*/
ENTRY(memset)
/*
* Preserve the contents of r0 for the return value.
*/
mov ip, r0
ands r3, ip, #3 @ 1 unaligned?
bne 1b @ 1
/*
* we know that the pointer in ip is aligned to a word boundary.
*/
orr r1, r1, r1, lsl #8
orr r1, r1, r1, lsl #16
mov r3, r1
cmp r2, #16
blt 4f
#if ! CALGN(1)+0
/*
* We need 2 extra registers for this loop - use r8 and the LR
*/
stmfd sp!, {r8, lr}
mov r8, r1
mov lr, r1
2: subs r2, r2, #64
stmgeia ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
stmgeia ip!, {r1, r3, r8, lr}
stmgeia ip!, {r1, r3, r8, lr}
stmgeia ip!, {r1, r3, r8, lr}
bgt 2b
ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
/*
* No need to correct the count; we're only testing bits from now on
*/
tst r2, #32
stmneia ip!, {r1, r3, r8, lr}
stmneia ip!, {r1, r3, r8, lr}
tst r2, #16
stmneia ip!, {r1, r3, r8, lr}
ldmfd sp!, {r8, lr}
#else
/*
* This version aligns the destination pointer in order to write
* whole cache lines at once.
*/
stmfd sp!, {r4-r8, lr}
mov r4, r1
mov r5, r1
mov r6, r1
mov r7, r1
mov r8, r1
mov lr, r1
cmp r2, #96
tstgt ip, #31
ble 3f
and r8, ip, #31
rsb r8, r8, #32
sub r2, r2, r8
movs r8, r8, lsl #(32 - 4)
stmcsia ip!, {r4, r5, r6, r7}
stmmiia ip!, {r4, r5}
tst r8, #(1 << 30)
mov r8, r1
strne r1, [ip], #4
3: subs r2, r2, #64
stmgeia ip!, {r1, r3-r8, lr}
stmgeia ip!, {r1, r3-r8, lr}
bgt 3b
ldmeqfd sp!, {r4-r8, pc}
tst r2, #32
stmneia ip!, {r1, r3-r8, lr}
tst r2, #16
stmneia ip!, {r4-r7}
ldmfd sp!, {r4-r8, lr}
#endif
4: tst r2, #8
stmneia ip!, {r1, r3}
tst r2, #4
strne r1, [ip], #4
/*
* When we get here, we've got less than 4 bytes to zero. We
* may have an unaligned pointer as well.
*/
5: tst r2, #2
strneb r1, [ip], #1
strneb r1, [ip], #1
tst r2, #1
strneb r1, [ip], #1
mov pc, lr
ENDPROC(memset)

View File

@ -0,0 +1,65 @@
#ifndef __LINUX_COMPILER_H
#error "Please don't include <linux/compiler-gcc7.h> directly, include <linux/compiler.h> instead."
#endif
#define __used __attribute__((__used__))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
/* Mark functions as cold. gcc will assume any path leading to a call
to them will be unlikely. This means a lot of manual unlikely()s
are unnecessary now for any paths leading to the usual suspects
like BUG(), printk(), panic() etc. [but let's keep them for now for
older compilers]
Early snapshots of gcc 4.3 don't support this and we can't detect this
in the preprocessor, but we can live with this because they're unreleased.
Maketime probing would be overkill here.
gcc also has a __attribute__((__hot__)) to move hot functions into
a special section, but I don't see any sense in this right now in
the kernel context */
#define __cold __attribute__((__cold__))
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
#ifndef __CHECKER__
# define __compiletime_warning(message) __attribute__((warning(message)))
# define __compiletime_error(message) __attribute__((error(message)))
#endif /* __CHECKER__ */
/*
* Mark a position in code as unreachable. This can be used to
* suppress control flow warnings after asm blocks that transfer
* control elsewhere.
*
* Early snapshots of gcc 4.5 don't support this and we can't detect
* this in the preprocessor, but we can live with this because they're
* unreleased. Really, we need to have autoconf for the kernel.
*/
#define unreachable() __builtin_unreachable()
/* Mark a function definition as prohibited from being cloned. */
#define __noclone __attribute__((__noclone__))
/*
* Tell the optimizer that something else uses this function or variable.
*/
#define __visible __attribute__((externally_visible))
/*
* GCC 'asm goto' miscompiles certain code sequences:
*
* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
*
* Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
*
* (asm goto is automatically volatile - the naming reflects this.)
*/
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
#define __HAVE_BUILTIN_BSWAP32__
#define __HAVE_BUILTIN_BSWAP64__
#define __HAVE_BUILTIN_BSWAP16__
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */

View File

@ -0,0 +1,379 @@
#!/usr/bin/perl
# -----------------------------------------------------------------------
#
# Copyright 2007-2008 rPath, Inc. - All Rights Reserved
#
# This file is part of the Linux kernel, and is made available under
# the terms of the GNU General Public License version 2 or (at your
# option) any later version; incorporated herein by reference.
#
# -----------------------------------------------------------------------
#
#
# Usage: timeconst.pl HZ > timeconst.h
#
# Precomputed values for systems without Math::BigInt
# Generated by:
# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200
%canned_values = (
24 => [
'0xa6aaaaab','0x2aaaaaa',26,
125,3,
'0xc49ba5e4','0x1fbe76c8b4',37,
3,125,
'0xa2c2aaab','0xaaaa',16,
125000,3,
'0xc9539b89','0x7fffbce4217d',47,
3,125000,
], 32 => [
'0xfa000000','0x6000000',27,
125,4,
'0x83126e98','0xfdf3b645a',36,
4,125,
'0xf4240000','0x0',17,
31250,1,
'0x8637bd06','0x3fff79c842fa',46,
1,31250,
], 48 => [
'0xa6aaaaab','0x6aaaaaa',27,
125,6,
'0xc49ba5e4','0xfdf3b645a',36,
6,125,
'0xa2c2aaab','0x15555',17,
62500,3,
'0xc9539b89','0x3fffbce4217d',46,
3,62500,
], 64 => [
'0xfa000000','0xe000000',28,
125,8,
'0x83126e98','0x7ef9db22d',35,
8,125,
'0xf4240000','0x0',18,
15625,1,
'0x8637bd06','0x1fff79c842fa',45,
1,15625,
], 100 => [
'0xa0000000','0x0',28,
10,1,
'0xcccccccd','0x733333333',35,
1,10,
'0x9c400000','0x0',18,
10000,1,
'0xd1b71759','0x1fff2e48e8a7',45,
1,10000,
], 122 => [
'0x8325c53f','0xfbcda3a',28,
500,61,
'0xf9db22d1','0x7fbe76c8b',35,
61,500,
'0x8012e2a0','0x3ef36',18,
500000,61,
'0xffda4053','0x1ffffbce4217',45,
61,500000,
], 128 => [
'0xfa000000','0x1e000000',29,
125,16,
'0x83126e98','0x3f7ced916',34,
16,125,
'0xf4240000','0x40000',19,
15625,2,
'0x8637bd06','0xfffbce4217d',44,
2,15625,
], 200 => [
'0xa0000000','0x0',29,
5,1,
'0xcccccccd','0x333333333',34,
1,5,
'0x9c400000','0x0',19,
5000,1,
'0xd1b71759','0xfff2e48e8a7',44,
1,5000,
], 250 => [
'0x80000000','0x0',29,
4,1,
'0x80000000','0x180000000',33,
1,4,
'0xfa000000','0x0',20,
4000,1,
'0x83126e98','0x7ff7ced9168',43,
1,4000,
], 256 => [
'0xfa000000','0x3e000000',30,
125,32,
'0x83126e98','0x1fbe76c8b',33,
32,125,
'0xf4240000','0xc0000',20,
15625,4,
'0x8637bd06','0x7ffde7210be',43,
4,15625,
], 300 => [
'0xd5555556','0x2aaaaaaa',30,
10,3,
'0x9999999a','0x1cccccccc',33,
3,10,
'0xd0555556','0xaaaaa',20,
10000,3,
'0x9d495183','0x7ffcb923a29',43,
3,10000,
], 512 => [
'0xfa000000','0x7e000000',31,
125,64,
'0x83126e98','0xfdf3b645',32,
64,125,
'0xf4240000','0x1c0000',21,
15625,8,
'0x8637bd06','0x3ffef39085f',42,
8,15625,
], 1000 => [
'0x80000000','0x0',31,
1,1,
'0x80000000','0x0',31,
1,1,
'0xfa000000','0x0',22,
1000,1,
'0x83126e98','0x1ff7ced9168',41,
1,1000,
], 1024 => [
'0xfa000000','0xfe000000',32,
125,128,
'0x83126e98','0x7ef9db22',31,
128,125,
'0xf4240000','0x3c0000',22,
15625,16,
'0x8637bd06','0x1fff79c842f',41,
16,15625,
], 1200 => [
'0xd5555556','0xd5555555',32,
5,6,
'0x9999999a','0x66666666',31,
6,5,
'0xd0555556','0x2aaaaa',22,
2500,3,
'0x9d495183','0x1ffcb923a29',41,
3,2500,
]
);
$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';
sub bint($)
{
my($x) = @_;
return Math::BigInt->new($x);
}
#
# Constants for division by reciprocal multiplication.
# (bits, numerator, denominator)
#
sub fmul($$$)
{
my ($b,$n,$d) = @_;
$n = bint($n);
$d = bint($d);
return scalar (($n << $b)+$d-bint(1))/$d;
}
sub fadj($$$)
{
my($b,$n,$d) = @_;
$n = bint($n);
$d = bint($d);
$d = $d/bgcd($n, $d);
return scalar (($d-bint(1)) << $b)/$d;
}
sub fmuls($$$) {
my($b,$n,$d) = @_;
my($s,$m);
my($thres) = bint(1) << ($b-1);
$n = bint($n);
$d = bint($d);
for ($s = 0; 1; $s++) {
$m = fmul($s,$n,$d);
return $s if ($m >= $thres);
}
return 0;
}
# Generate a hex value if the result fits in 64 bits;
# otherwise skip.
sub bignum_hex($) {
my($x) = @_;
my $s = $x->as_hex();
return (length($s) > 18) ? undef : $s;
}
# Provides mul, adj, and shr factors for a specific
# (bit, time, hz) combination
sub muladj($$$) {
my($b, $t, $hz) = @_;
my $s = fmuls($b, $t, $hz);
my $m = fmul($s, $t, $hz);
my $a = fadj($s, $t, $hz);
return (bignum_hex($m), bignum_hex($a), $s);
}
# Provides numerator, denominator values
sub numden($$) {
my($n, $d) = @_;
my $g = bgcd($n, $d);
return ($n/$g, $d/$g);
}
# All values for a specific (time, hz) combo
sub conversions($$) {
my ($t, $hz) = @_;
my @val = ();
# HZ_TO_xx
push(@val, muladj(32, $t, $hz));
push(@val, numden($t, $hz));
# xx_TO_HZ
push(@val, muladj(32, $hz, $t));
push(@val, numden($hz, $t));
return @val;
}
sub compute_values($) {
my($hz) = @_;
my @val = ();
my $s, $m, $a, $g;
if (!$has_bigint) {
die "$0: HZ == $hz not canned and ".
"Math::BigInt not available\n";
}
# MSEC conversions
push(@val, conversions(1000, $hz));
# USEC conversions
push(@val, conversions(1000000, $hz));
return @val;
}
sub outputval($$)
{
my($name, $val) = @_;
my $csuf;
if (defined($val)) {
if ($name !~ /SHR/) {
$val = "U64_C($val)";
}
printf "#define %-23s %s\n", $name.$csuf, $val.$csuf;
}
}
sub output($@)
{
my($hz, @val) = @_;
my $pfx, $bit, $suf, $s, $m, $a;
print "/* Automatically generated by kernel/timeconst.pl */\n";
print "/* Conversion constants for HZ == $hz */\n";
print "\n";
print "#ifndef KERNEL_TIMECONST_H\n";
print "#define KERNEL_TIMECONST_H\n";
print "\n";
print "#include <linux/param.h>\n";
print "#include <linux/types.h>\n";
print "\n";
print "#if HZ != $hz\n";
print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n";
print "#endif\n";
print "\n";
foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',
'HZ_TO_USEC','USEC_TO_HZ') {
foreach $bit (32) {
foreach $suf ('MUL', 'ADJ', 'SHR') {
outputval("${pfx}_$suf$bit", shift(@val));
}
}
foreach $suf ('NUM', 'DEN') {
outputval("${pfx}_$suf", shift(@val));
}
}
print "\n";
print "#endif /* KERNEL_TIMECONST_H */\n";
}
# Pretty-print Perl values
sub perlvals(@) {
my $v;
my @l = ();
foreach $v (@_) {
if (!defined($v)) {
push(@l, 'undef');
} elsif ($v =~ /^0x/) {
push(@l, "\'".$v."\'");
} else {
push(@l, $v.'');
}
}
return join(',', @l);
}
($hz) = @ARGV;
# Use this to generate the %canned_values structure
if ($hz eq '--can') {
shift(@ARGV);
@hzlist = sort {$a <=> $b} (@ARGV);
print "# Precomputed values for systems without Math::BigInt\n";
print "# Generated by:\n";
print "# timeconst.pl --can ", join(' ', @hzlist), "\n";
print "\%canned_values = (\n";
my $pf = "\t";
foreach $hz (@hzlist) {
my @values = compute_values($hz);
print "$pf$hz => [\n";
while (scalar(@values)) {
my $bit;
foreach $bit (32) {
my $m = shift(@values);
my $a = shift(@values);
my $s = shift(@values);
print "\t\t", perlvals($m,$a,$s), ",\n";
}
my $n = shift(@values);
my $d = shift(@values);
print "\t\t", perlvals($n,$d), ",\n";
}
print "\t]";
$pf = ', ';
}
print "\n);\n";
} else {
$hz += 0; # Force to number
if ($hz < 1) {
die "Usage: $0 HZ\n";
}
@val = @{$canned_values{$hz}};
#if (!defined(@val)) {
if(!@val) {
@val = compute_values($hz);
}
output($hz, @val);
}
exit 0;

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

View File

@ -0,0 +1,2 @@
MEM_START_ADDR=0x80000000
KERNEL_UPLOAD_ADDR=0x81000000

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516av100
CHIP=hi3516av100
RAM_SIZE=256M
RAM_LINUX_SIZE=128M
RAM_MPP_SIZE=128M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516av200
CHIP=hi3516av200
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516cv500
CHIP=hi3516av300
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516cv100
CHIP=hi3516cv100
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516cv500
CHIP=hi3516cv500
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516av100
CHIP=hi3516dv100
RAM_SIZE=256M
RAM_LINUX_SIZE=128M
RAM_MPP_SIZE=128M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516cv500
CHIP=hi3516dv300
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516cv100
CHIP=hi3518cv100
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516cv100
CHIP=hi3518ev100
RAM_SIZE=64M
RAM_LINUX_SIZE=48M
RAM_MPP_SIZE=8M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3519av100
CHIP=hi3519av100
RAM_SIZE=512M
RAM_LINUX_SIZE=256M
RAM_MPP_SIZE=256M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3516av200
CHIP=hi3519v101
RAM_SIZE=128M
RAM_LINUX_SIZE=64M
RAM_MPP_SIZE=64M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,10 @@
VENDOR=unknown
MODEL=unknown
FAMILY=hi3559av100
CHIP=hi3559av100
RAM_SIZE=512M
RAM_LINUX_SIZE=256M
RAM_MPP_SIZE=256M
ROM_SIZE=?
CMOS=unknown
UBOOT_SIZE=1024K

View File

@ -0,0 +1,22 @@
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="4.9.37"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av100/kernel/hi3516av100.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av100/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av100/kernel/overlay"

View File

@ -0,0 +1,22 @@
BR2_arm=y
BR2_cortex_a17_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="3.18.20"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_18=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="3.18.20"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av200/kernel/hi3516av200.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av200/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av200/kernel/overlay"

View File

@ -0,0 +1,22 @@
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="4.9.37"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/hi3516av300.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/overlay"

View File

@ -0,0 +1,19 @@
BR2_arm=y
BR2_ARM_INSTRUCTIONS_THUMB=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="3.0.8"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_0=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="3.0.8"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/hi3516cv100.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/overlay"

View File

@ -0,0 +1,22 @@
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="4.9.37"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/hi3516cv500.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/overlay"

View File

@ -0,0 +1,22 @@
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="4.9.37"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av100/kernel/hi3516dv100.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av100/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av100/kernel/overlay"

View File

@ -0,0 +1,22 @@
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="4.9.37"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/hi3516dv300.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv500/kernel/overlay"

View File

@ -0,0 +1,19 @@
BR2_arm=y
BR2_ARM_INSTRUCTIONS_THUMB=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="3.0.8"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_0=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="3.0.8"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/hi3518cv100.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/overlay"

View File

@ -0,0 +1,19 @@
BR2_arm=y
BR2_ARM_INSTRUCTIONS_THUMB=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="3.0.8"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_0=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="3.0.8"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/hi3518ev100.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516cv100/kernel/overlay"

View File

@ -0,0 +1,24 @@
BR2_arm=y
BR2_cortex_a17_a7=y
BR2_ARM_EABI=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="3.18.20"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_18=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
BR2_GCC_VERSION_7_X=y
BR2_ROOTFS_OVERLAY="$(TOPDIR)/../overlay-common"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="3.18.20"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av200/kernel/hi3519v101.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
# BR2_TARGET_ROOTFS_TAR is not set
BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y
BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av200/kernel/patches/ $(BR2_EXTERNAL_HISICAM_PATH)/board/hi3516av200/kernel/overlay $(BR2_EXTERNAL_HISICAM_PATH)/board/jvt_s274h19v-l29_hi3519v101_imx274/kernel/overlay"