mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-26 17:11:36 +02:00
Merge branch '2021-07-23-assorted-fixes'
- Assorted FIT, optee, pcf8575, mux, vexpress64 and distro bootcmd fixes. - Allow pinmux status to take pin names
This commit is contained in:
commit
f534d93cbf
@ -140,7 +140,7 @@ static int do_part_info(int argc, char *const argv[], enum cmd_part_info param)
|
|||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
part = part_get_info_by_name(desc, argv[2], &info);
|
part = part_get_info_by_name(desc, argv[2], &info);
|
||||||
if (part == -1)
|
if (part < 0)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
65
cmd/pinmux.c
65
cmd/pinmux.c
@ -41,31 +41,43 @@ static int do_dev(struct cmd_tbl *cmdtp, int flag, int argc,
|
|||||||
return CMD_RET_SUCCESS;
|
return CMD_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int show_pinmux(struct udevice *dev)
|
/**
|
||||||
|
* Print the muxing information for one or all pins of one pinctrl device
|
||||||
|
*
|
||||||
|
* @param dev pinctrl device
|
||||||
|
* @param name NULL to display all the pins
|
||||||
|
* or name of the pin to display
|
||||||
|
* @return 0 on success, non-0 on error
|
||||||
|
*/
|
||||||
|
static int show_pinmux(struct udevice *dev, char *name)
|
||||||
{
|
{
|
||||||
char pin_name[PINNAME_SIZE];
|
char pin_name[PINNAME_SIZE];
|
||||||
char pin_mux[PINMUX_SIZE];
|
char pin_mux[PINMUX_SIZE];
|
||||||
int pins_count;
|
int pins_count;
|
||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
pins_count = pinctrl_get_pins_count(dev);
|
pins_count = pinctrl_get_pins_count(dev);
|
||||||
|
|
||||||
if (pins_count == -ENOSYS) {
|
if (pins_count == -ENOSYS) {
|
||||||
printf("Ops get_pins_count not supported\n");
|
printf("Ops get_pins_count not supported by %s\n", dev->name);
|
||||||
return pins_count;
|
return pins_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < pins_count; i++) {
|
for (i = 0; i < pins_count; i++) {
|
||||||
ret = pinctrl_get_pin_name(dev, i, pin_name, PINNAME_SIZE);
|
ret = pinctrl_get_pin_name(dev, i, pin_name, PINNAME_SIZE);
|
||||||
if (ret == -ENOSYS) {
|
if (ret) {
|
||||||
printf("Ops get_pin_name not supported\n");
|
printf("Ops get_pin_name error (%d) by %s\n", ret, dev->name);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
if (name && strcmp(name, pin_name))
|
||||||
|
continue;
|
||||||
|
found = true;
|
||||||
ret = pinctrl_get_pin_muxing(dev, i, pin_mux, PINMUX_SIZE);
|
ret = pinctrl_get_pin_muxing(dev, i, pin_mux, PINMUX_SIZE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf("Ops get_pin_muxing error (%d)\n", ret);
|
printf("Ops get_pin_muxing error (%d) by %s in %s\n",
|
||||||
|
ret, pin_name, dev->name);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +85,9 @@ static int show_pinmux(struct udevice *dev)
|
|||||||
PINMUX_SIZE, pin_mux);
|
PINMUX_SIZE, pin_mux);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,25 +95,41 @@ static int do_status(struct cmd_tbl *cmdtp, int flag, int argc,
|
|||||||
char *const argv[])
|
char *const argv[])
|
||||||
{
|
{
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
int ret = CMD_RET_USAGE;
|
char *name;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (currdev && (argc < 2 || strcmp(argv[1], "-a")))
|
if (argc < 2) {
|
||||||
return show_pinmux(currdev);
|
if (!currdev) {
|
||||||
|
printf("pin-controller device not selected\n");
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
show_pinmux(currdev, NULL);
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (argc < 2 || strcmp(argv[1], "-a"))
|
if (strcmp(argv[1], "-a"))
|
||||||
return ret;
|
name = argv[1];
|
||||||
|
else
|
||||||
|
name = NULL;
|
||||||
|
|
||||||
uclass_foreach_dev_probe(UCLASS_PINCTRL, dev) {
|
uclass_foreach_dev_probe(UCLASS_PINCTRL, dev) {
|
||||||
|
if (!name) {
|
||||||
/* insert a separator between each pin-controller display */
|
/* insert a separator between each pin-controller display */
|
||||||
printf("--------------------------\n");
|
printf("--------------------------\n");
|
||||||
printf("%s:\n", dev->name);
|
printf("%s:\n", dev->name);
|
||||||
ret = show_pinmux(dev);
|
}
|
||||||
if (ret < 0)
|
ret = show_pinmux(dev, name);
|
||||||
printf("Can't display pin muxing for %s\n",
|
/* stop when the status of requested pin is displayed */
|
||||||
dev->name);
|
if (name && !ret)
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
if (name) {
|
||||||
|
printf("%s not found\n", name);
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
static int do_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
@ -146,5 +177,5 @@ U_BOOT_CMD(pinmux, CONFIG_SYS_MAXARGS, 1, do_pinmux,
|
|||||||
"show pin-controller muxing",
|
"show pin-controller muxing",
|
||||||
"list - list UCLASS_PINCTRL devices\n"
|
"list - list UCLASS_PINCTRL devices\n"
|
||||||
"pinmux dev [pincontroller-name] - select pin-controller device\n"
|
"pinmux dev [pincontroller-name] - select pin-controller device\n"
|
||||||
"pinmux status [-a] - print pin-controller muxing [for all]\n"
|
"pinmux status [-a | pin-name] - print pin-controller muxing [for all | for pin-name]\n"
|
||||||
)
|
)
|
||||||
|
@ -358,6 +358,7 @@ config HAVE_SYS_TEXT_BASE
|
|||||||
|
|
||||||
config SYS_TEXT_BASE
|
config SYS_TEXT_BASE
|
||||||
depends on HAVE_SYS_TEXT_BASE
|
depends on HAVE_SYS_TEXT_BASE
|
||||||
|
default 0x0 if POSITION_INDEPENDENT
|
||||||
default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
|
default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
|
||||||
default 0x4a000000 if ARCH_SUNXI && !MACH_SUN9I && !MACH_SUN8I_V3S
|
default 0x4a000000 if ARCH_SUNXI && !MACH_SUN9I && !MACH_SUN8I_V3S
|
||||||
default 0x2a000000 if ARCH_SUNXI && MACH_SUN9I
|
default 0x2a000000 if ARCH_SUNXI && MACH_SUN9I
|
||||||
|
@ -1777,7 +1777,8 @@ int fit_conf_find_compat(const void *fit, const void *fdt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search in this config's kernel FDT */
|
/* search in this config's kernel FDT */
|
||||||
if (fit_image_get_data(fit, kfdt_noffset, &fdt, &sz)) {
|
if (fit_image_get_data_and_size(fit, kfdt_noffset,
|
||||||
|
&fdt, &sz)) {
|
||||||
debug("Failed to get fdt \"%s\".\n", kfdt_name);
|
debug("Failed to get fdt \"%s\".\n", kfdt_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
|
|||||||
spl_image->name = "U-Boot";
|
spl_image->name = "U-Boot";
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_LOAD_FIT_FULL
|
#if CONFIG_IS_ENABLED(LOAD_FIT_FULL)
|
||||||
/* Parse and load full fitImage in SPL */
|
/* Parse and load full fitImage in SPL */
|
||||||
static int spl_load_fit_image(struct spl_image_info *spl_image,
|
static int spl_load_fit_image(struct spl_image_info *spl_image,
|
||||||
const struct image_header *header)
|
const struct image_header *header)
|
||||||
@ -307,7 +307,7 @@ __weak int spl_parse_legacy_header(struct spl_image_info *spl_image,
|
|||||||
int spl_parse_image_header(struct spl_image_info *spl_image,
|
int spl_parse_image_header(struct spl_image_info *spl_image,
|
||||||
const struct image_header *header)
|
const struct image_header *header)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SPL_LOAD_FIT_FULL
|
#if CONFIG_IS_ENABLED(LOAD_FIT_FULL)
|
||||||
int ret = spl_load_fit_image(spl_image, header);
|
int ret = spl_load_fit_image(spl_image, header);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
@ -12,15 +12,9 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2007 David Brownell
|
* Copyright (C) 2007 David Brownell
|
||||||
*
|
*
|
||||||
*/
|
* Add support for 8 bit expanders - like pca8574
|
||||||
|
* Copyright (C) 2021 Lukasz Majewski - DENX Software Engineering
|
||||||
/*
|
|
||||||
* NOTE: The driver and devicetree bindings are borrowed from Linux
|
|
||||||
* Kernel, but driver does not support all PCF857x devices. It currently
|
|
||||||
* supports PCF8575 16-bit expander by TI and NXP.
|
|
||||||
*
|
*
|
||||||
* TODO(vigneshr@ti.com):
|
|
||||||
* Support 8 bit PCF857x compatible expanders.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
@ -34,8 +28,6 @@
|
|||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
struct pcf8575_chip {
|
struct pcf8575_chip {
|
||||||
int gpio_count; /* No. GPIOs supported by the chip */
|
|
||||||
|
|
||||||
/* NOTE: these chips have strange "quasi-bidirectional" I/O pins.
|
/* NOTE: these chips have strange "quasi-bidirectional" I/O pins.
|
||||||
* We can't actually know whether a pin is configured (a) as output
|
* We can't actually know whether a pin is configured (a) as output
|
||||||
* and driving the signal low, or (b) as input and reporting a low
|
* and driving the signal low, or (b) as input and reporting a low
|
||||||
@ -49,18 +41,17 @@ struct pcf8575_chip {
|
|||||||
* reset state. Otherwise it flags pins to be driven low.
|
* reset state. Otherwise it flags pins to be driven low.
|
||||||
*/
|
*/
|
||||||
unsigned int out; /* software latch */
|
unsigned int out; /* software latch */
|
||||||
const char *bank_name; /* Name of the expander bank */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Read/Write to 16-bit I/O expander */
|
/* Read/Write to I/O expander */
|
||||||
|
|
||||||
static int pcf8575_i2c_write_le16(struct udevice *dev, unsigned int word)
|
static int pcf8575_i2c_write(struct udevice *dev, unsigned int word)
|
||||||
{
|
{
|
||||||
struct dm_i2c_chip *chip = dev_get_parent_plat(dev);
|
struct dm_i2c_chip *chip = dev_get_parent_plat(dev);
|
||||||
u8 buf[2] = { word & 0xff, word >> 8, };
|
u8 buf[2] = { word & 0xff, word >> 8, };
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = dm_i2c_write(dev, 0, buf, 2);
|
ret = dm_i2c_write(dev, 0, buf, dev_get_driver_data(dev));
|
||||||
if (ret)
|
if (ret)
|
||||||
printf("%s i2c write failed to addr %x\n", __func__,
|
printf("%s i2c write failed to addr %x\n", __func__,
|
||||||
chip->chip_addr);
|
chip->chip_addr);
|
||||||
@ -68,13 +59,13 @@ static int pcf8575_i2c_write_le16(struct udevice *dev, unsigned int word)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pcf8575_i2c_read_le16(struct udevice *dev)
|
static int pcf8575_i2c_read(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct dm_i2c_chip *chip = dev_get_parent_plat(dev);
|
struct dm_i2c_chip *chip = dev_get_parent_plat(dev);
|
||||||
u8 buf[2];
|
u8 buf[2] = {0x00, 0x00};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = dm_i2c_read(dev, 0, buf, 2);
|
ret = dm_i2c_read(dev, 0, buf, dev_get_driver_data(dev));
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf("%s i2c read failed from addr %x\n", __func__,
|
printf("%s i2c read failed from addr %x\n", __func__,
|
||||||
chip->chip_addr);
|
chip->chip_addr);
|
||||||
@ -90,7 +81,7 @@ static int pcf8575_direction_input(struct udevice *dev, unsigned offset)
|
|||||||
int status;
|
int status;
|
||||||
|
|
||||||
plat->out |= BIT(offset);
|
plat->out |= BIT(offset);
|
||||||
status = pcf8575_i2c_write_le16(dev, plat->out);
|
status = pcf8575_i2c_write(dev, plat->out);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -106,7 +97,7 @@ static int pcf8575_direction_output(struct udevice *dev,
|
|||||||
else
|
else
|
||||||
plat->out &= ~BIT(offset);
|
plat->out &= ~BIT(offset);
|
||||||
|
|
||||||
ret = pcf8575_i2c_write_le16(dev, plat->out);
|
ret = pcf8575_i2c_write(dev, plat->out);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -115,7 +106,7 @@ static int pcf8575_get_value(struct udevice *dev, unsigned int offset)
|
|||||||
{
|
{
|
||||||
int value;
|
int value;
|
||||||
|
|
||||||
value = pcf8575_i2c_read_le16(dev);
|
value = pcf8575_i2c_read(dev);
|
||||||
|
|
||||||
return (value < 0) ? value : ((value & BIT(offset)) >> offset);
|
return (value < 0) ? value : ((value & BIT(offset)) >> offset);
|
||||||
}
|
}
|
||||||
@ -133,8 +124,11 @@ static int pcf8575_ofdata_plat(struct udevice *dev)
|
|||||||
|
|
||||||
int n_latch;
|
int n_latch;
|
||||||
|
|
||||||
uc_priv->gpio_count = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev),
|
/*
|
||||||
"gpio-count", 16);
|
* Number of pins depends on the expander device and is specified
|
||||||
|
* in the struct udevice_id (as in the Linue kernel).
|
||||||
|
*/
|
||||||
|
uc_priv->gpio_count = dev_get_driver_data(dev) * 8;
|
||||||
uc_priv->bank_name = fdt_getprop(gd->fdt_blob, dev_of_offset(dev),
|
uc_priv->bank_name = fdt_getprop(gd->fdt_blob, dev_of_offset(dev),
|
||||||
"gpio-bank-name", NULL);
|
"gpio-bank-name", NULL);
|
||||||
if (!uc_priv->bank_name)
|
if (!uc_priv->bank_name)
|
||||||
@ -166,8 +160,9 @@ static const struct dm_gpio_ops pcf8575_gpio_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct udevice_id pcf8575_gpio_ids[] = {
|
static const struct udevice_id pcf8575_gpio_ids[] = {
|
||||||
{ .compatible = "nxp,pcf8575" },
|
{ .compatible = "nxp,pcf8575", .data = 2 },
|
||||||
{ .compatible = "ti,pcf8575" },
|
{ .compatible = "ti,pcf8575", .data = 2 },
|
||||||
|
{ .compatible = "nxp,pca8574", .data = 1 },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Linaro Limited
|
* Copyright (c) 2018-2020 Linaro Limited
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <cpu_func.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <dm/device_compat.h>
|
#include <dm/device_compat.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
@ -295,6 +296,16 @@ static u32 call_err_to_res(u32 call_err)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void flush_shm_dcache(struct udevice *dev, struct optee_msg_arg *arg)
|
||||||
|
{
|
||||||
|
size_t sz = OPTEE_MSG_GET_ARG_SIZE(arg->num_params);
|
||||||
|
|
||||||
|
flush_dcache_range(rounddown((ulong)arg, CONFIG_SYS_CACHELINE_SIZE),
|
||||||
|
roundup((ulong)arg + sz, CONFIG_SYS_CACHELINE_SIZE));
|
||||||
|
|
||||||
|
tee_flush_all_shm_dcache(dev);
|
||||||
|
}
|
||||||
|
|
||||||
static u32 do_call_with_arg(struct udevice *dev, struct optee_msg_arg *arg)
|
static u32 do_call_with_arg(struct udevice *dev, struct optee_msg_arg *arg)
|
||||||
{
|
{
|
||||||
struct optee_pdata *pdata = dev_get_plat(dev);
|
struct optee_pdata *pdata = dev_get_plat(dev);
|
||||||
@ -305,9 +316,17 @@ static u32 do_call_with_arg(struct udevice *dev, struct optee_msg_arg *arg)
|
|||||||
while (true) {
|
while (true) {
|
||||||
struct arm_smccc_res res;
|
struct arm_smccc_res res;
|
||||||
|
|
||||||
|
/* If cache are off from U-Boot, sync the cache shared with OP-TEE */
|
||||||
|
if (!dcache_status())
|
||||||
|
flush_shm_dcache(dev, arg);
|
||||||
|
|
||||||
pdata->invoke_fn(param.a0, param.a1, param.a2, param.a3,
|
pdata->invoke_fn(param.a0, param.a1, param.a2, param.a3,
|
||||||
param.a4, param.a5, param.a6, param.a7, &res);
|
param.a4, param.a5, param.a6, param.a7, &res);
|
||||||
|
|
||||||
|
/* If cache are off from U-Boot, sync the cache shared with OP-TEE */
|
||||||
|
if (!dcache_status())
|
||||||
|
flush_shm_dcache(dev, arg);
|
||||||
|
|
||||||
free(page_list);
|
free(page_list);
|
||||||
page_list = NULL;
|
page_list = NULL;
|
||||||
|
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Linaro Limited
|
* Copyright (c) 2018-2020 Linaro Limited
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define LOG_CATEGORY UCLASS_TEE
|
#define LOG_CATEGORY UCLASS_TEE
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <cpu_func.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <tee.h>
|
#include <tee.h>
|
||||||
|
#include <asm/cache.h>
|
||||||
#include <dm/device-internal.h>
|
#include <dm/device-internal.h>
|
||||||
#include <dm/uclass-internal.h>
|
#include <dm/uclass-internal.h>
|
||||||
|
|
||||||
@ -235,3 +237,18 @@ void tee_optee_ta_uuid_to_octets(u8 d[TEE_UUID_LEN],
|
|||||||
d[7] = s->time_hi_and_version;
|
d[7] = s->time_hi_and_version;
|
||||||
memcpy(d + 8, s->clock_seq_and_node, sizeof(s->clock_seq_and_node));
|
memcpy(d + 8, s->clock_seq_and_node, sizeof(s->clock_seq_and_node));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tee_flush_all_shm_dcache(struct udevice *dev)
|
||||||
|
{
|
||||||
|
struct tee_uclass_priv *priv = dev_get_uclass_priv(dev);
|
||||||
|
struct tee_shm *s;
|
||||||
|
|
||||||
|
list_for_each_entry(s, &priv->list_shm, link) {
|
||||||
|
ulong start = rounddown((ulong)s->addr,
|
||||||
|
CONFIG_SYS_CACHELINE_SIZE);
|
||||||
|
ulong end = roundup((ulong)s->addr + s->size,
|
||||||
|
CONFIG_SYS_CACHELINE_SIZE);
|
||||||
|
|
||||||
|
flush_dcache_range(start, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -375,7 +375,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \
|
#define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \
|
||||||
"bootcmd_dhcp=" \
|
"bootcmd_dhcp=" \
|
||||||
"setenv devtype " #devtypel "; " \
|
"devtype=" #devtypel "; " \
|
||||||
BOOTENV_RUN_NET_USB_START \
|
BOOTENV_RUN_NET_USB_START \
|
||||||
BOOTENV_RUN_PCI_ENUM \
|
BOOTENV_RUN_PCI_ENUM \
|
||||||
"if dhcp ${scriptaddr} ${boot_script_dhcp}; then " \
|
"if dhcp ${scriptaddr} ${boot_script_dhcp}; then " \
|
||||||
|
@ -84,7 +84,6 @@
|
|||||||
* Ethernet Driver configuration
|
* Ethernet Driver configuration
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_CMD_NET
|
#ifdef CONFIG_CMD_NET
|
||||||
#define CONFIG_NET_MULTI /* specify more that one ports available */
|
|
||||||
#define CONFIG_MVGBE /* Enable kirkwood Gbe Controller Driver */
|
#define CONFIG_MVGBE /* Enable kirkwood Gbe Controller Driver */
|
||||||
#define CONFIG_MVGBE_PORTS {1, 0} /* enable a single port */
|
#define CONFIG_MVGBE_PORTS {1, 0} /* enable a single port */
|
||||||
#define CONFIG_PHY_BASE_ADR 0x01
|
#define CONFIG_PHY_BASE_ADR 0x01
|
||||||
|
@ -84,7 +84,6 @@
|
|||||||
* Ethernet Driver configuration
|
* Ethernet Driver configuration
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_CMD_NET
|
#ifdef CONFIG_CMD_NET
|
||||||
#define CONFIG_NET_MULTI /* specify more that one ports available */
|
|
||||||
#define CONFIG_MVGBE /* Enable kirkwood Gbe Controller Driver */
|
#define CONFIG_MVGBE /* Enable kirkwood Gbe Controller Driver */
|
||||||
#define CONFIG_MVGBE_PORTS {1, 0} /* enable a single port */
|
#define CONFIG_MVGBE_PORTS {1, 0} /* enable a single port */
|
||||||
#define CONFIG_PHY_BASE_ADR 0x01
|
#define CONFIG_PHY_BASE_ADR 0x01
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
#include "rcar-gen3-common.h"
|
#include "rcar-gen3-common.h"
|
||||||
|
|
||||||
/* Ethernet RAVB */
|
/* Ethernet RAVB */
|
||||||
#define CONFIG_NET_MULTI
|
|
||||||
#define CONFIG_BITBANGMII_MULTI
|
#define CONFIG_BITBANGMII_MULTI
|
||||||
|
|
||||||
/* Generic Timer Definitions (use in assembler source) */
|
/* Generic Timer Definitions (use in assembler source) */
|
||||||
|
@ -126,6 +126,39 @@
|
|||||||
|
|
||||||
/* Initial environment variables */
|
/* Initial environment variables */
|
||||||
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||||
|
/* Copy the kernel and FDT to DRAM memory and boot */
|
||||||
|
#define BOOTENV_DEV_AFS(devtypeu, devtypel, instance) \
|
||||||
|
"bootcmd_afs=" \
|
||||||
|
"afs load ${kernel_name} ${kernel_addr_r} ;"\
|
||||||
|
"if test $? -eq 1; then "\
|
||||||
|
" echo Loading ${kernel_alt_name} instead of ${kernel_name}; "\
|
||||||
|
" afs load ${kernel_alt_name} ${kernel_addr_r};"\
|
||||||
|
"fi ; "\
|
||||||
|
"afs load ${fdtfile} ${fdt_addr_r} ;"\
|
||||||
|
"if test $? -eq 1; then "\
|
||||||
|
" echo Loading ${fdt_alt_name} instead of ${fdtfile}; "\
|
||||||
|
" afs load ${fdt_alt_name} ${fdt_addr_r}; "\
|
||||||
|
"fi ; "\
|
||||||
|
"fdt addr ${fdt_addr_r}; fdt resize; " \
|
||||||
|
"if afs load ${ramdisk_name} ${ramdisk_addr_r} ; "\
|
||||||
|
"then "\
|
||||||
|
" setenv ramdisk_param ${ramdisk_addr_r}; "\
|
||||||
|
"else "\
|
||||||
|
" setenv ramdisk_param -; "\
|
||||||
|
"fi ; " \
|
||||||
|
"booti ${kernel_addr_r} ${ramdisk_param} ${fdt_addr_r}\0"
|
||||||
|
#define BOOTENV_DEV_NAME_AFS(devtypeu, devtypel, instance) "afs "
|
||||||
|
|
||||||
|
#define BOOT_TARGET_DEVICES(func) \
|
||||||
|
func(USB, usb, 0) \
|
||||||
|
func(SATA, sata, 0) \
|
||||||
|
func(SATA, sata, 1) \
|
||||||
|
func(PXE, pxe, na) \
|
||||||
|
func(DHCP, dhcp, na) \
|
||||||
|
func(AFS, afs, na)
|
||||||
|
|
||||||
|
#include <config_distro_bootcmd.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defines where the kernel and FDT exist in NOR flash and where it will
|
* Defines where the kernel and FDT exist in NOR flash and where it will
|
||||||
* be copied into DRAM
|
* be copied into DRAM
|
||||||
@ -139,30 +172,7 @@
|
|||||||
"fdtfile=board.dtb\0" \
|
"fdtfile=board.dtb\0" \
|
||||||
"fdt_alt_name=juno\0" \
|
"fdt_alt_name=juno\0" \
|
||||||
"fdt_addr_r=0x80000000\0" \
|
"fdt_addr_r=0x80000000\0" \
|
||||||
|
BOOTENV
|
||||||
#ifndef CONFIG_BOOTCOMMAND
|
|
||||||
/* Copy the kernel and FDT to DRAM memory and boot */
|
|
||||||
#define CONFIG_BOOTCOMMAND "afs load ${kernel_name} ${kernel_addr_r} ;"\
|
|
||||||
"if test $? -eq 1; then "\
|
|
||||||
" echo Loading ${kernel_alt_name} instead of "\
|
|
||||||
"${kernel_name}; "\
|
|
||||||
" afs load ${kernel_alt_name} ${kernel_addr_r};"\
|
|
||||||
"fi ; "\
|
|
||||||
"afs load ${fdtfile} ${fdt_addr_r} ;"\
|
|
||||||
"if test $? -eq 1; then "\
|
|
||||||
" echo Loading ${fdt_alt_name} instead of "\
|
|
||||||
"${fdtfile}; "\
|
|
||||||
" afs load ${fdt_alt_name} ${fdt_addr_r}; "\
|
|
||||||
"fi ; "\
|
|
||||||
"fdt addr ${fdt_addr_r}; fdt resize; " \
|
|
||||||
"if afs load ${ramdisk_name} ${ramdisk_addr_r} ; "\
|
|
||||||
"then "\
|
|
||||||
" setenv ramdisk_param ${ramdisk_addr_r}; "\
|
|
||||||
" else setenv ramdisk_param -; "\
|
|
||||||
"fi ; " \
|
|
||||||
"booti ${kernel_addr_r} ${ramdisk_param} ${fdt_addr_r}"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP
|
#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
|
@ -53,7 +53,6 @@
|
|||||||
|
|
||||||
/* Ethernet driver */
|
/* Ethernet driver */
|
||||||
#if defined(CONFIG_ZYNQ_GEM)
|
#if defined(CONFIG_ZYNQ_GEM)
|
||||||
# define CONFIG_NET_MULTI
|
|
||||||
# define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
|
# define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
|
||||||
# define PHY_ANEG_TIMEOUT 20000
|
# define PHY_ANEG_TIMEOUT 20000
|
||||||
#endif
|
#endif
|
||||||
|
@ -587,7 +587,7 @@ int pinctrl_get_pin_muxing(struct udevice *dev, int selector, char *buf,
|
|||||||
*
|
*
|
||||||
* This allows to know the number of pins owned by a given pin-controller
|
* This allows to know the number of pins owned by a given pin-controller
|
||||||
*
|
*
|
||||||
* Return: Number of pins if OK, or negative error code on failure
|
* Return: Number of pins if OK, or -ENOSYS when not supported
|
||||||
*/
|
*/
|
||||||
int pinctrl_get_pins_count(struct udevice *dev);
|
int pinctrl_get_pins_count(struct udevice *dev);
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ unsigned int mux_control_states(struct mux_control *mux);
|
|||||||
*/
|
*/
|
||||||
int __must_check mux_control_select(struct mux_control *mux,
|
int __must_check mux_control_select(struct mux_control *mux,
|
||||||
unsigned int state);
|
unsigned int state);
|
||||||
#define mux_control_try_select(mux) mux_control_select(mux)
|
#define mux_control_try_select(mux, state) mux_control_select(mux, state)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mux_control_deselect() - Deselect the previously selected multiplexer state.
|
* mux_control_deselect() - Deselect the previously selected multiplexer state.
|
||||||
@ -128,7 +128,7 @@ int __must_check mux_control_select(struct mux_control *mux,
|
|||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define mux_control_try_select(mux) mux_control_select(mux)
|
#define mux_control_try_select(mux, state) mux_control_select(mux, state)
|
||||||
|
|
||||||
int mux_control_deselect(struct mux_control *mux)
|
int mux_control_deselect(struct mux_control *mux)
|
||||||
{
|
{
|
||||||
|
@ -377,4 +377,10 @@ void tee_optee_ta_uuid_from_octets(struct tee_optee_ta_uuid *d,
|
|||||||
void tee_optee_ta_uuid_to_octets(u8 d[TEE_UUID_LEN],
|
void tee_optee_ta_uuid_to_octets(u8 d[TEE_UUID_LEN],
|
||||||
const struct tee_optee_ta_uuid *s);
|
const struct tee_optee_ta_uuid *s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tee_flush_all_shm_dcache() - Flush data cache for all shared memories
|
||||||
|
* @dev: The TEE device
|
||||||
|
*/
|
||||||
|
void tee_flush_all_shm_dcache(struct udevice *dev);
|
||||||
|
|
||||||
#endif /* __TEE_H */
|
#endif /* __TEE_H */
|
||||||
|
@ -8,5 +8,6 @@ endif
|
|||||||
obj-y += mem.o
|
obj-y += mem.o
|
||||||
obj-$(CONFIG_CMD_ADDRMAP) += addrmap.o
|
obj-$(CONFIG_CMD_ADDRMAP) += addrmap.o
|
||||||
obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o
|
obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o
|
||||||
|
obj-$(CONFIG_CMD_PINMUX) += pinmux.o
|
||||||
obj-$(CONFIG_CMD_PWM) += pwm.o
|
obj-$(CONFIG_CMD_PWM) += pwm.o
|
||||||
obj-$(CONFIG_CMD_SETEXPR) += setexpr.o
|
obj-$(CONFIG_CMD_SETEXPR) += setexpr.o
|
||||||
|
36
test/cmd/pinmux.c
Normal file
36
test/cmd/pinmux.c
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Executes tests for pinmux command
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021, STMicroelectronics - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <command.h>
|
||||||
|
#include <dm/test.h>
|
||||||
|
#include <test/test.h>
|
||||||
|
#include <test/ut.h>
|
||||||
|
|
||||||
|
static int dm_test_cmd_pinmux_status_pinname(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
/* Test that 'pinmux status <pinname>' displays the selected pin. */
|
||||||
|
console_record_reset();
|
||||||
|
run_command("pinmux status a5", 0);
|
||||||
|
ut_assert_nextline("a5 : gpio input . ");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
console_record_reset();
|
||||||
|
run_command("pinmux status P7", 0);
|
||||||
|
ut_assert_nextline("P7 : GPIO2 bias-pull-down input-enable. ");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
console_record_reset();
|
||||||
|
run_command("pinmux status P9", 0);
|
||||||
|
ut_assert_nextline("single-pinctrl pinctrl-single-no-width: missing register width");
|
||||||
|
ut_assert_nextline("P9 not found");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DM_TEST(dm_test_cmd_pinmux_status_pinname, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
@ -13,9 +13,9 @@ def test_pinmux_usage_1(u_boot_console):
|
|||||||
@pytest.mark.buildconfigspec('cmd_pinmux')
|
@pytest.mark.buildconfigspec('cmd_pinmux')
|
||||||
def test_pinmux_usage_2(u_boot_console):
|
def test_pinmux_usage_2(u_boot_console):
|
||||||
"""Test that 'pinmux status' executed without previous "pinmux dev"
|
"""Test that 'pinmux status' executed without previous "pinmux dev"
|
||||||
command displays pinmux usage."""
|
command displays error message."""
|
||||||
output = u_boot_console.run_command('pinmux status')
|
output = u_boot_console.run_command('pinmux status')
|
||||||
assert 'Usage:' in output
|
assert 'pin-controller device not selected' in output
|
||||||
|
|
||||||
@pytest.mark.buildconfigspec('cmd_pinmux')
|
@pytest.mark.buildconfigspec('cmd_pinmux')
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user