smp_scu.c 924 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * linux/arch/arm/kernel/smp_scu.c
  3. *
  4. * Copyright (C) 2002 ARM Ltd.
  5. * All Rights Reserved
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. */
  11. #include <linux/init.h>
  12. #include <linux/io.h>
  13. #include <asm/smp_scu.h>
  14. #define SCU_CTRL 0x00
  15. #define SCU_CONFIG 0x04
  16. #define SCU_CPU_STATUS 0x08
  17. #define SCU_INVALIDATE 0x0c
  18. #define SCU_FPGA_REVISION 0x10
  19. /*
  20. * Get the number of CPU cores from the SCU configuration
  21. */
  22. unsigned int __init scu_get_core_count(void __iomem *scu_base)
  23. {
  24. unsigned int ncores = __raw_readl(scu_base + SCU_CONFIG);
  25. return (ncores & 0x03) + 1;
  26. }
  27. /*
  28. * Enable the SCU
  29. */
  30. void __init scu_enable(void __iomem *scu_base)
  31. {
  32. u32 scu_ctrl;
  33. scu_ctrl = __raw_readl(scu_base + SCU_CTRL);
  34. scu_ctrl |= 1;
  35. __raw_writel(scu_ctrl, scu_base + SCU_CTRL);
  36. }