1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /*
- * Copyright (C) 2020 Sartura Ltd.
- * Author: Luka Kovacic <luka.kovacic@sartura.hr>
- *
- * SPDX-License-Identifier: BSD-3-Clause
- * https://spdx.org/licenses
- */
- #include <armada_common.h>
- #include <common/debug.h>
- #include <drivers/delay_timer.h>
- #include <drivers/ti/uart/uart_16550.h>
- #include <drivers/console.h>
- #include <plat_marvell.h>
- /*****************************************************************************
- * Platform specific power off functions
- * Power off PSU / Send command to power management MCU / ...
- *****************************************************************************
- */
- unsigned char add_xor_checksum(unsigned char *buf, unsigned char xor_len)
- {
- unsigned char xor_sum = 0;
- unsigned int i;
- for (i = 0; i < xor_len; i++)
- xor_sum ^= buf[i];
- return xor_sum;
- }
- int system_power_off(void)
- {
- static console_t console;
- /* WT61P803 MCU system_off_now command */
- unsigned char system_off_now[4] = { '@', 'C', '0' };
- int i, len;
- len = sizeof(system_off_now);
- system_off_now[len - 1] = add_xor_checksum(system_off_now, len);
- console_16550_register(PLAT_MARVELL_UART_BASE + 0x100,
- PLAT_MARVELL_UART_CLK_IN_HZ, 115200, &console);
- /* Send system_off_now to console */
- for (i = 0; i < len; i++) {
- console.putc(system_off_now[i], &console);
- udelay(1000);
- }
- console.flush(&console);
- (void)console_unregister(&console);
- mdelay(100);
- return 0;
- }
|