mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
Merge tag 'ti-v2020.10-rc4' of https://gitlab.denx.de/u-boot/custodians/u-boot-ti
- Update to ABI 3.0 - Fix i2c write in eeprom driver
This commit is contained in:
@@ -135,7 +135,7 @@
|
|||||||
<0x0 0x2a500000 0x0 0x40000>;
|
<0x0 0x2a500000 0x0 0x40000>;
|
||||||
reg-names = "rt", "fifos", "proxy_gcfg", "proxy_target";
|
reg-names = "rt", "fifos", "proxy_gcfg", "proxy_target";
|
||||||
ti,num-rings = <286>;
|
ti,num-rings = <286>;
|
||||||
ti,sci-rm-range-gp-rings = <0x2>; /* GP ring range */
|
ti,sci-rm-range-gp-rings = <0x1>; /* GP ring range */
|
||||||
ti,dma-ring-reset-quirk;
|
ti,dma-ring-reset-quirk;
|
||||||
ti,sci = <&dmsc>;
|
ti,sci = <&dmsc>;
|
||||||
ti,sci-dev-id = <195>;
|
ti,sci-dev-id = <195>;
|
||||||
@@ -153,11 +153,11 @@
|
|||||||
ti,sci-dev-id = <194>;
|
ti,sci-dev-id = <194>;
|
||||||
ti,ringacc = <&mcu_ringacc>;
|
ti,ringacc = <&mcu_ringacc>;
|
||||||
|
|
||||||
ti,sci-rm-range-tchan = <0x1>, /* TX_HCHAN */
|
ti,sci-rm-range-tchan = <0xf>, /* TX_HCHAN */
|
||||||
<0x2>; /* TX_CHAN */
|
<0xd>; /* TX_CHAN */
|
||||||
ti,sci-rm-range-rchan = <0x3>, /* RX_HCHAN */
|
ti,sci-rm-range-rchan = <0xb>, /* RX_HCHAN */
|
||||||
<0x4>; /* RX_CHAN */
|
<0xa>; /* RX_CHAN */
|
||||||
ti,sci-rm-range-rflow = <0x5>; /* GP RFLOW */
|
ti,sci-rm-range-rflow = <0x0>; /* GP RFLOW */
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -113,18 +113,15 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
|
|||||||
|
|
||||||
/* Corrupted data??? */
|
/* Corrupted data??? */
|
||||||
if (hdr_read != header) {
|
if (hdr_read != header) {
|
||||||
rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
|
|
||||||
/*
|
/*
|
||||||
* read the eeprom header using i2c again, but use only a
|
* read the eeprom header using i2c again, but use only a
|
||||||
* 1 byte address (some legacy boards need this..)
|
* 1 byte address (some legacy boards need this..)
|
||||||
*/
|
*/
|
||||||
if (rc) {
|
rc = i2c_set_chip_offset_len(dev, 1);
|
||||||
rc = i2c_set_chip_offset_len(dev, 1);
|
if (rc)
|
||||||
if (rc)
|
return rc;
|
||||||
return rc;
|
|
||||||
|
|
||||||
rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
|
rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
|
||||||
}
|
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -153,16 +150,13 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
|
|||||||
|
|
||||||
/* Corrupted data??? */
|
/* Corrupted data??? */
|
||||||
if (hdr_read != header) {
|
if (hdr_read != header) {
|
||||||
rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read, 4);
|
|
||||||
/*
|
/*
|
||||||
* read the eeprom header using i2c again, but use only a
|
* read the eeprom header using i2c again, but use only a
|
||||||
* 1 byte address (some legacy boards need this..)
|
* 1 byte address (some legacy boards need this..)
|
||||||
*/
|
*/
|
||||||
byte = 1;
|
byte = 1;
|
||||||
if (rc) {
|
rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read,
|
||||||
rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read,
|
4);
|
||||||
4);
|
|
||||||
}
|
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@@ -60,14 +60,12 @@ struct ti_sci_rm_type_map {
|
|||||||
* @max_msgs: Maximum number of messages that can be pending
|
* @max_msgs: Maximum number of messages that can be pending
|
||||||
* simultaneously in the system
|
* simultaneously in the system
|
||||||
* @max_msg_size: Maximum size of data per message that can be handled.
|
* @max_msg_size: Maximum size of data per message that can be handled.
|
||||||
* @rm_type_map: RM resource type mapping structure.
|
|
||||||
*/
|
*/
|
||||||
struct ti_sci_desc {
|
struct ti_sci_desc {
|
||||||
u8 default_host_id;
|
u8 default_host_id;
|
||||||
int max_rx_timeout_ms;
|
int max_rx_timeout_ms;
|
||||||
int max_msgs;
|
int max_msgs;
|
||||||
int max_msg_size;
|
int max_msg_size;
|
||||||
struct ti_sci_rm_type_map *rm_type_map;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1605,33 +1603,6 @@ static int ti_sci_cmd_core_reboot(const struct ti_sci_handle *handle)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ti_sci_get_resource_type(struct ti_sci_info *info, u16 dev_id,
|
|
||||||
u16 *type)
|
|
||||||
{
|
|
||||||
struct ti_sci_rm_type_map *rm_type_map = info->desc->rm_type_map;
|
|
||||||
bool found = false;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* If map is not provided then assume dev_id is used as type */
|
|
||||||
if (!rm_type_map) {
|
|
||||||
*type = dev_id;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; rm_type_map[i].dev_id; i++) {
|
|
||||||
if (rm_type_map[i].dev_id == dev_id) {
|
|
||||||
*type = rm_type_map[i].type;
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ti_sci_get_resource_range - Helper to get a range of resources assigned
|
* ti_sci_get_resource_range - Helper to get a range of resources assigned
|
||||||
* to a host. Resource is uniquely identified by
|
* to a host. Resource is uniquely identified by
|
||||||
@@ -1654,7 +1625,6 @@ static int ti_sci_get_resource_range(const struct ti_sci_handle *handle,
|
|||||||
struct ti_sci_msg_req_get_resource_range req;
|
struct ti_sci_msg_req_get_resource_range req;
|
||||||
struct ti_sci_xfer *xfer;
|
struct ti_sci_xfer *xfer;
|
||||||
struct ti_sci_info *info;
|
struct ti_sci_info *info;
|
||||||
u16 type;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (IS_ERR(handle))
|
if (IS_ERR(handle))
|
||||||
@@ -1673,14 +1643,8 @@ static int ti_sci_get_resource_range(const struct ti_sci_handle *handle,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ti_sci_get_resource_type(info, dev_id, &type);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "rm type lookup failed for %u\n", dev_id);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
req.secondary_host = s_host;
|
req.secondary_host = s_host;
|
||||||
req.type = type & MSG_RM_RESOURCE_TYPE_MASK;
|
req.type = dev_id & MSG_RM_RESOURCE_TYPE_MASK;
|
||||||
req.subtype = subtype & MSG_RM_RESOURCE_SUBTYPE_MASK;
|
req.subtype = subtype & MSG_RM_RESOURCE_SUBTYPE_MASK;
|
||||||
|
|
||||||
ret = ti_sci_do_xfer(info, xfer);
|
ret = ti_sci_do_xfer(info, xfer);
|
||||||
@@ -3096,7 +3060,6 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
|
|||||||
struct udevice *dev, u32 dev_id, char *of_prop)
|
struct udevice *dev, u32 dev_id, char *of_prop)
|
||||||
{
|
{
|
||||||
u32 resource_subtype;
|
u32 resource_subtype;
|
||||||
u16 resource_type;
|
|
||||||
struct ti_sci_resource *res;
|
struct ti_sci_resource *res;
|
||||||
bool valid_set = false;
|
bool valid_set = false;
|
||||||
int sets, i, ret;
|
int sets, i, ret;
|
||||||
@@ -3120,13 +3083,6 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
|
|||||||
if (!res->desc)
|
if (!res->desc)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
ret = ti_sci_get_resource_type(handle_to_ti_sci_info(handle), dev_id,
|
|
||||||
&resource_type);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "No valid resource type for %u\n", dev_id);
|
|
||||||
return ERR_PTR(-EINVAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = dev_read_u32_array(dev, of_prop, temp, res->sets);
|
ret = dev_read_u32_array(dev, of_prop, temp, res->sets);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ERR_PTR(-EINVAL);
|
return ERR_PTR(-EINVAL);
|
||||||
@@ -3139,7 +3095,7 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
|
|||||||
&res->desc[i].num);
|
&res->desc[i].num);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_dbg(dev, "type %d subtype %d not allocated for host %d\n",
|
dev_dbg(dev, "type %d subtype %d not allocated for host %d\n",
|
||||||
resource_type, resource_subtype,
|
dev_id, resource_subtype,
|
||||||
handle_to_ti_sci_info(handle)->host_id);
|
handle_to_ti_sci_info(handle)->host_id);
|
||||||
res->desc[i].start = 0;
|
res->desc[i].start = 0;
|
||||||
res->desc[i].num = 0;
|
res->desc[i].num = 0;
|
||||||
@@ -3148,7 +3104,7 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
|
|||||||
|
|
||||||
valid_set = true;
|
valid_set = true;
|
||||||
dev_dbg(dev, "res type = %d, subtype = %d, start = %d, num = %d\n",
|
dev_dbg(dev, "res type = %d, subtype = %d, start = %d, num = %d\n",
|
||||||
resource_type, resource_subtype, res->desc[i].start,
|
dev_id, resource_subtype, res->desc[i].start,
|
||||||
res->desc[i].num);
|
res->desc[i].num);
|
||||||
|
|
||||||
res->desc[i].res_map =
|
res->desc[i].res_map =
|
||||||
@@ -3172,17 +3128,6 @@ static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = {
|
|||||||
/* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */
|
/* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */
|
||||||
.max_msgs = 20,
|
.max_msgs = 20,
|
||||||
.max_msg_size = 64,
|
.max_msg_size = 64,
|
||||||
.rm_type_map = NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ti_sci_rm_type_map ti_sci_am654_rm_type_map[] = {
|
|
||||||
{.dev_id = 56, .type = 0x00b}, /* GIC_IRQ */
|
|
||||||
{.dev_id = 179, .type = 0x000}, /* MAIN_NAV_UDMASS_IA0 */
|
|
||||||
{.dev_id = 187, .type = 0x009}, /* MAIN_NAV_RA */
|
|
||||||
{.dev_id = 188, .type = 0x006}, /* MAIN_NAV_UDMAP */
|
|
||||||
{.dev_id = 194, .type = 0x007}, /* MCU_NAV_UDMAP */
|
|
||||||
{.dev_id = 195, .type = 0x00a}, /* MCU_NAV_RA */
|
|
||||||
{.dev_id = 0, .type = 0x000}, /* end of table */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Description for AM654 */
|
/* Description for AM654 */
|
||||||
@@ -3193,7 +3138,6 @@ static const struct ti_sci_desc ti_sci_pmmc_am654_desc = {
|
|||||||
/* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */
|
/* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */
|
||||||
.max_msgs = 20,
|
.max_msgs = 20,
|
||||||
.max_msg_size = 60,
|
.max_msg_size = 60,
|
||||||
.rm_type_map = ti_sci_am654_rm_type_map,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct udevice_id ti_sci_ids[] = {
|
static const struct udevice_id ti_sci_ids[] = {
|
||||||
|
Reference in New Issue
Block a user