mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-02 00:03:45 +09:00
![Tom Rini](/assets/img/avatar_default.png)
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
378 lines
7.7 KiB
C
378 lines
7.7 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Freescale Layerscape MC I/O wrapper
|
|
*
|
|
* Copyright (C) 2013-2016 Freescale Semiconductor, Inc.
|
|
* Copyright 2017 NXP
|
|
*/
|
|
|
|
#include <fsl-mc/fsl_mc_sys.h>
|
|
#include <fsl-mc/fsl_mc_cmd.h>
|
|
#include <fsl-mc/fsl_dprc.h>
|
|
|
|
int dprc_get_container_id(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
int *container_id)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
|
|
cmd_flags,
|
|
0);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_open(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
int container_id,
|
|
uint16_t *token)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
|
|
0);
|
|
DPRC_CMD_OPEN(cmd, container_id);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_close(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
|
|
token);
|
|
|
|
/* send command to mc*/
|
|
return mc_send_command(mc_io, &cmd);
|
|
}
|
|
|
|
int dprc_create_container(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
struct dprc_cfg *cfg,
|
|
int *child_container_id,
|
|
uint64_t *child_portal_paddr)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
DPRC_CMD_CREATE_CONTAINER(cmd, cfg);
|
|
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_CREATE_CONT,
|
|
cmd_flags,
|
|
token);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_CREATE_CONTAINER(cmd, *child_container_id,
|
|
*child_portal_paddr);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_destroy_container(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
int child_container_id)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_DESTROY_CONT,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id);
|
|
|
|
/* send command to mc*/
|
|
return mc_send_command(mc_io, &cmd);
|
|
}
|
|
|
|
int dprc_reset_container(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
int child_container_id)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
|
|
|
|
/* send command to mc*/
|
|
return mc_send_command(mc_io, &cmd);
|
|
}
|
|
|
|
int dprc_get_attributes(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
struct dprc_attributes *attr)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
|
|
cmd_flags,
|
|
token);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_get_obj_count(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
int *obj_count)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
|
|
cmd_flags,
|
|
token);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_get_obj(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
int obj_index,
|
|
struct dprc_obj_desc *obj_desc)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_GET_OBJ(cmd, obj_index);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_OBJ(cmd, obj_desc);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_get_res_count(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
char *type,
|
|
int *res_count)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
*res_count = 0;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_GET_RES_COUNT(cmd, type);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_get_res_ids(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
char *type,
|
|
struct dprc_res_ids_range_desc *range_desc)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_RES_IDS(cmd, range_desc);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_get_obj_region(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
char *obj_type,
|
|
int obj_id,
|
|
uint8_t region_index,
|
|
struct dprc_region_desc *region_desc)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_connect(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
const struct dprc_endpoint *endpoint1,
|
|
const struct dprc_endpoint *endpoint2,
|
|
const struct dprc_connection_cfg *cfg)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
|
|
|
|
/* send command to mc*/
|
|
return mc_send_command(mc_io, &cmd);
|
|
}
|
|
|
|
int dprc_disconnect(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
const struct dprc_endpoint *endpoint)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_DISCONNECT(cmd, endpoint);
|
|
|
|
/* send command to mc*/
|
|
return mc_send_command(mc_io, &cmd);
|
|
}
|
|
|
|
int dprc_get_connection(struct fsl_mc_io *mc_io,
|
|
uint32_t cmd_flags,
|
|
uint16_t token,
|
|
const struct dprc_endpoint *endpoint1,
|
|
struct dprc_endpoint *endpoint2,
|
|
int *state)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
|
|
cmd_flags,
|
|
token);
|
|
DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
|
|
|
|
/* send command to mc*/
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int dprc_get_api_version(struct fsl_mc_io *mc_io,
|
|
u32 cmd_flags,
|
|
u16 *major_ver,
|
|
u16 *minor_ver)
|
|
{
|
|
struct mc_command cmd = { 0 };
|
|
int err;
|
|
|
|
/* prepare command */
|
|
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_API_VERSION,
|
|
cmd_flags, 0);
|
|
|
|
/* send command to mc */
|
|
err = mc_send_command(mc_io, &cmd);
|
|
if (err)
|
|
return err;
|
|
|
|
/* retrieve response parameters */
|
|
mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
|
|
|
|
return 0;
|
|
}
|