Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
4af16543
Unverified
Commit
4af16543
authored
Apr 16, 2018
by
Dimitris Papastamos
Committed by
GitHub
Apr 16, 2018
Browse files
Merge pull request #1346 from samarthp/sp/support-multiple-mhu-gen
plat/arm: Add MHUv2 support to SCMI driver
parents
8b371200
a427785c
Changes
12
Hide whitespace changes
Inline
Side-by-side
plat/arm/css/common/css_common.mk
View file @
4af16543
...
...
@@ -28,13 +28,14 @@ BL31_SOURCES += plat/arm/css/common/css_pm.c \
ifeq
(${CSS_USE_SCMI_SDS_DRIVER},0)
BL31_SOURCES
+=
plat/arm/css/drivers/scp/css_pm_scpi.c
\
plat/arm/css/drivers/
scpi
/css_mhu.c
\
plat/arm/css/drivers/
mhu
/css_mhu.c
\
plat/arm/css/drivers/scpi/css_scpi.c
else
BL31_SOURCES
+=
plat/arm/css/drivers/scp/css_pm_scmi.c
\
plat/arm/css/drivers/scmi/scmi_common.c
\
plat/arm/css/drivers/scmi/scmi_pwr_dmn_proto.c
\
plat/arm/css/drivers/scmi/scmi_sys_pwr_proto.c
plat/arm/css/drivers/scmi/scmi_sys_pwr_proto.c
\
plat/arm/css/drivers/mhu/css_mhu_doorbell.c
endif
ifneq
(${RESET_TO_BL31},0)
...
...
@@ -60,11 +61,11 @@ ifeq (${CSS_LOAD_SCP_IMAGES},1)
plat/arm/css/drivers/sds/sds.c
else
BL2U_SOURCES
+=
plat/arm/css/drivers/scp/css_bom_bootloader.c
\
plat/arm/css/drivers/
scpi
/css_mhu.c
\
plat/arm/css/drivers/
mhu
/css_mhu.c
\
plat/arm/css/drivers/scpi/css_scpi.c
BL2_SOURCES
+=
plat/arm/css/drivers/scp/css_bom_bootloader.c
\
plat/arm/css/drivers/
scpi
/css_mhu.c
\
plat/arm/css/drivers/
mhu
/css_mhu.c
\
plat/arm/css/drivers/scpi/css_scpi.c
# Enable option to detect whether the SCP ROM firmware in use predates version
# 1.7.0 and therefore, is incompatible.
...
...
plat/arm/css/common/sp_min/css_sp_min.mk
View file @
4af16543
#
# Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
# Copyright (c) 2017
-2018
, ARM Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
...
...
@@ -10,11 +10,12 @@ BL32_SOURCES += plat/arm/css/common/css_pm.c \
ifeq
(${CSS_USE_SCMI_SDS_DRIVER},0)
BL32_SOURCES
+=
plat/arm/css/drivers/scp/css_pm_scpi.c
\
plat/arm/css/drivers/
scpi
/css_mhu.c
\
plat/arm/css/drivers/
mhu
/css_mhu.c
\
plat/arm/css/drivers/scpi/css_scpi.c
else
BL32_SOURCES
+=
plat/arm/css/drivers/scp/css_pm_scmi.c
\
plat/arm/css/drivers/scmi/scmi_common.c
\
plat/arm/css/drivers/scmi/scmi_pwr_dmn_proto.c
\
plat/arm/css/drivers/scmi/scmi_sys_pwr_proto.c
plat/arm/css/drivers/scmi/scmi_sys_pwr_proto.c
\
plat/arm/css/drivers/mhu/css_mhu_doorbell.c
endif
plat/arm/css/drivers/
scpi
/css_mhu.c
→
plat/arm/css/drivers/
mhu
/css_mhu.c
View file @
4af16543
/*
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
8
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
plat/arm/css/drivers/
scpi
/css_mhu.h
→
plat/arm/css/drivers/
mhu
/css_mhu.h
View file @
4af16543
/*
* Copyright (c) 2014-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
8
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
plat/arm/css/drivers/mhu/css_mhu_doorbell.c
0 → 100644
View file @
4af16543
/*
* Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch_helpers.h>
#include <platform_def.h>
#include "css_mhu_doorbell.h"
#include "../scmi/scmi.h"
void
mhu_ring_doorbell
(
scmi_channel_plat_info_t
*
plat_info
)
{
MHU_RING_DOORBELL
(
plat_info
->
db_reg_addr
,
plat_info
->
db_modify_mask
,
plat_info
->
db_preserve_mask
);
return
;
}
void
mhuv2_ring_doorbell
(
scmi_channel_plat_info_t
*
plat_info
)
{
/* wake receiver */
MHU_V2_ACCESS_REQUEST
(
MHUV2_BASE_ADDR
);
/* wait for receiver to acknowledge its ready */
while
(
MHU_V2_IS_ACCESS_READY
(
MHUV2_BASE_ADDR
)
==
0
)
;
MHU_RING_DOORBELL
(
plat_info
->
db_reg_addr
,
plat_info
->
db_modify_mask
,
plat_info
->
db_preserve_mask
);
/* clear the access request for the recevier */
MHU_V2_CLEAR_REQUEST
(
MHUV2_BASE_ADDR
);
return
;
}
plat/arm/css/drivers/mhu/css_mhu_doorbell.h
0 → 100644
View file @
4af16543
/*
* Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef CSS_MHU_DOORBELL_H
#define CSS_MHU_DOORBELL_H
#include <mmio.h>
#include <stdint.h>
/* MHUv2 Base Address */
#define MHUV2_BASE_ADDR PLAT_CSS_MHU_BASE
/* MHUv2 Control Registers Offsets */
#define MHU_V2_MSG_NO_CAP_OFFSET 0xF80
#define MHU_V2_ACCESS_REQ_OFFSET 0xF88
#define MHU_V2_ACCESS_READY_OFFSET 0xF8C
#define SENDER_REG_STAT(CHANNEL) (0x20 * (CHANNEL))
#define SENDER_REG_SET(CHANNEL) (0x20 * (CHANNEL)) + 0xC
/* Helper macro to ring doorbell */
#define MHU_RING_DOORBELL(addr, modify_mask, preserve_mask) do { \
uint32_t db = mmio_read_32(addr) & (preserve_mask); \
mmio_write_32(addr, db | (modify_mask)); \
} while (0)
#define MHU_V2_ACCESS_REQUEST(addr) \
mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x1)
#define MHU_V2_CLEAR_REQUEST(addr) \
mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x0)
#define MHU_V2_IS_ACCESS_READY(addr) \
(mmio_read_32((addr) + MHU_V2_ACCESS_READY_OFFSET) & 0x1)
struct
scmi_channel_plat_info
;
void
mhu_ring_doorbell
(
struct
scmi_channel_plat_info
*
plat_info
);
void
mhuv2_ring_doorbell
(
struct
scmi_channel_plat_info
*
plat_info
);
#endif
/* CSS_MHU_DOORBELL_H */
plat/arm/css/drivers/scmi/scmi.h
View file @
4af16543
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017
-2018
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -96,6 +96,10 @@ typedef struct scmi_channel_plat_info {
uint32_t
db_preserve_mask
;
/* The bit mask that need to be set to ring doorbell */
uint32_t
db_modify_mask
;
/* The handler for ringing doorbell */
void
(
*
ring_doorbell
)(
struct
scmi_channel_plat_info
*
plat_info
);
/* cookie is unused now. But added for future enhancements. */
void
*
cookie
;
}
scmi_channel_plat_info_t
;
/*
...
...
plat/arm/css/drivers/scmi/scmi_common.c
View file @
4af16543
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017
-2018
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -39,9 +39,7 @@ void scmi_send_sync_command(scmi_channel_t *ch)
*/
dmbst
();
SCMI_RING_DOORBELL
(
ch
->
info
->
db_reg_addr
,
ch
->
info
->
db_modify_mask
,
ch
->
info
->
db_preserve_mask
);
ch
->
info
->
ring_doorbell
(
ch
->
info
);
/*
* Ensure that the write to the doorbell register is ordered prior to
* checking whether the channel is free.
...
...
@@ -150,6 +148,7 @@ void *scmi_init(scmi_channel_t *ch)
assert
(
ch
->
info
->
db_reg_addr
);
assert
(
ch
->
info
->
db_modify_mask
);
assert
(
ch
->
info
->
db_preserve_mask
);
assert
(
ch
->
info
->
ring_doorbell
!=
NULL
);
assert
(
ch
->
lock
);
...
...
plat/arm/css/drivers/scmi/scmi_private.h
View file @
4af16543
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017
-2018
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -113,12 +113,6 @@
(val3) = mmio_read_32((uintptr_t)&payld_arr[2]); \
} while (0)
/* Helper macro to ring doorbell */
#define SCMI_RING_DOORBELL(addr, modify_mask, preserve_mask) do { \
uint32_t db = mmio_read_32(addr) & (preserve_mask); \
mmio_write_32(addr, db | (modify_mask)); \
} while (0)
/*
* Private data structure for representing the mailbox memory layout. Refer
* the SCMI specification for more details.
...
...
plat/arm/css/drivers/scp/css_bom_bootloader.c
View file @
4af16543
...
...
@@ -10,7 +10,7 @@
#include <debug.h>
#include <platform.h>
#include <stdint.h>
#include "../
scpi
/css_mhu.h"
#include "../
mhu
/css_mhu.h"
#include "../scpi/css_scpi.h"
#include "css_scp.h"
...
...
plat/arm/css/drivers/scp/css_pm_scmi.c
View file @
4af16543
...
...
@@ -13,6 +13,7 @@
#include <platform.h>
#include <string.h>
#include "../scmi/scmi.h"
#include "../mhu/css_mhu_doorbell.h"
#include "css_scp.h"
/*
...
...
@@ -302,6 +303,7 @@ scmi_channel_plat_info_t plat_css_scmi_plat_info = {
.
db_reg_addr
=
PLAT_CSS_MHU_BASE
+
CSS_SCMI_MHU_DB_REG_OFF
,
.
db_preserve_mask
=
0xfffffffe
,
.
db_modify_mask
=
0x1
,
.
ring_doorbell
=
&
mhu_ring_doorbell
,
};
void
plat_arm_pwrc_setup
(
void
)
...
...
plat/arm/css/drivers/scpi/css_scpi.c
View file @
4af16543
/*
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
8
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -11,7 +11,7 @@
#include <platform.h>
#include <string.h>
#include <utils.h>
#include "css_mhu.h"
#include "
../mhu/
css_mhu.h"
#include "css_scpi.h"
#define SCPI_SHARED_MEM_SCP_TO_AP PLAT_CSS_SCP_COM_SHARED_MEM_BASE
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment