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
5219862c
Commit
5219862c
authored
Jun 23, 2014
by
danh-arm
Browse files
Merge pull request #140 from athoelke/at/psci_smc_handler
PSCI SMC handler improvements
parents
5298f2cb
5003ecab
Changes
1
Show whitespace changes
Inline
Side-by-side
services/std_svc/psci/psci_main.c
View file @
5219862c
...
@@ -221,50 +221,68 @@ uint64_t psci_smc_handler(uint32_t smc_fid,
...
@@ -221,50 +221,68 @@ uint64_t psci_smc_handler(uint32_t smc_fid,
void
*
handle
,
void
*
handle
,
uint64_t
flags
)
uint64_t
flags
)
{
{
uint64_t
rc
;
if
(
is_caller_secure
(
flags
))
SMC_RET1
(
handle
,
SMC_UNK
);
if
(((
smc_fid
>>
FUNCID_CC_SHIFT
)
&
FUNCID_CC_MASK
)
==
SMC_32
)
{
/* 32-bit PSCI function, clear top parameter bits */
x1
=
(
uint32_t
)
x1
;
x2
=
(
uint32_t
)
x2
;
x3
=
(
uint32_t
)
x3
;
switch
(
smc_fid
)
{
switch
(
smc_fid
)
{
case
PSCI_VERSION
:
case
PSCI_VERSION
:
rc
=
psci_version
();
SMC_RET1
(
handle
,
psci_version
());
break
;
case
PSCI_CPU_OFF
:
case
PSCI_CPU_OFF
:
rc
=
__psci_cpu_off
();
SMC_RET1
(
handle
,
__psci_cpu_off
());
break
;
case
PSCI_CPU_SUSPEND_AARCH64
:
case
PSCI_CPU_SUSPEND_AARCH32
:
case
PSCI_CPU_SUSPEND_AARCH32
:
rc
=
__psci_cpu_suspend
(
x1
,
x2
,
x3
);
SMC_RET1
(
handle
,
__psci_cpu_suspend
(
x1
,
x2
,
x3
));
break
;
case
PSCI_CPU_ON_AARCH64
:
case
PSCI_CPU_ON_AARCH32
:
case
PSCI_CPU_ON_AARCH32
:
rc
=
psci_cpu_on
(
x1
,
x2
,
x3
);
SMC_RET1
(
handle
,
psci_cpu_on
(
x1
,
x2
,
x3
));
break
;
case
PSCI_AFFINITY_INFO_AARCH32
:
case
PSCI_AFFINITY_INFO_AARCH32
:
case
PSCI_AFFINITY_INFO_AARCH64
:
SMC_RET1
(
handle
,
psci_affinity_info
(
x1
,
x2
));
rc
=
psci_affinity_info
(
x1
,
x2
);
break
;
case
PSCI_MIG_AARCH32
:
case
PSCI_MIG_AARCH32
:
case
PSCI_MIG_AARCH64
:
SMC_RET1
(
handle
,
psci_migrate
(
x1
));
rc
=
psci_migrate
(
x1
);
break
;
case
PSCI_MIG_INFO_TYPE
:
case
PSCI_MIG_INFO_TYPE
:
rc
=
psci_migrate_info_type
();
SMC_RET1
(
handle
,
psci_migrate_info_type
());
break
;
case
PSCI_MIG_INFO_UP_CPU_AARCH32
:
case
PSCI_MIG_INFO_UP_CPU_AARCH32
:
case
PSCI_MIG_INFO_UP_CPU_AARCH64
:
SMC_RET1
(
handle
,
psci_migrate_info_up_cpu
());
rc
=
psci_migrate_info_up_cpu
();
default:
break
;
break
;
}
}
else
{
/* 64-bit PSCI function */
switch
(
smc_fid
)
{
case
PSCI_CPU_SUSPEND_AARCH64
:
SMC_RET1
(
handle
,
__psci_cpu_suspend
(
x1
,
x2
,
x3
));
case
PSCI_CPU_ON_AARCH64
:
SMC_RET1
(
handle
,
psci_cpu_on
(
x1
,
x2
,
x3
));
case
PSCI_AFFINITY_INFO_AARCH64
:
SMC_RET1
(
handle
,
psci_affinity_info
(
x1
,
x2
));
case
PSCI_MIG_AARCH64
:
SMC_RET1
(
handle
,
psci_migrate
(
x1
));
case
PSCI_MIG_INFO_UP_CPU_AARCH64
:
SMC_RET1
(
handle
,
psci_migrate_info_up_cpu
());
default:
default:
rc
=
SMC_UNK
;
break
;
WARN
(
"Unimplemented PSCI Call: 0x%x
\n
"
,
smc_fid
);
}
}
}
SMC_RET1
(
handle
,
rc
);
WARN
(
"Unimplemented PSCI Call: 0x%x
\n
"
,
smc_fid
);
SMC_RET1
(
handle
,
SMC_UNK
);
}
}
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