Commit Graph

6874 Commits

Author SHA1 Message Date
Ingo Weinhold
69a8b95491 FixedWidthPointer: Fix ==/!= operators, remove OtherType casts
* FixedWidthPointer:
  - operators ==/!=: Change second operand type from void* to const
    Type*. Also add non-const version to resolve ambiguity warning when
    comparing with non-const pointer.
  - Add Pointer() getter.
  - Remove templatized cast operators. They are nice for casting the
    pointer directly to another pointer type, but result in ambiguity.
* Make preloaded_image::debug_string_table non-const. Avoids clashes of
  the const and non-coast FixedWidthPointer comparison operators. A
  cleaner (but more verbose) solution would be to spezialize
  FixedWidthPointer for const types.
2012-06-24 15:26:00 +01:00
Alex Smith
ccadfaeeb5 Changed the boot ELF code to use templates and added ELF64 support.
The actual implementation of the ELF loading methods have been put into
an ELFLoader template class that takes a single template parameter, which
is a structure containing all the necessary ELF typedefs. It's a bit
verbose, but I thought it was a neater solution than using a bunch of
standalone functions with a huge number of template parameters. There is
no change to code outside of elf.cpp, the ELF32/ELF64 differences are
handled internally.
2012-06-23 12:05:16 +01:00
Alex Smith
3a2a3367dc Support static_cast on FixedWidthPointer. 2012-06-22 19:55:38 +01:00
Alex Smith
f124497815 Added an ELF64 version of preloaded_image.
* There is now 2 structures, preloaded_elf32_image and preloaded_elf64_image,
  which both inherit from preloaded_image.
* For now I've just hardcoded in use of preloaded_elf32_image, but the
  bootloader ELF code will shortly be converted to use templates which use
  the appropriate structure. The kernel will be changed later when I add
  ELF64 support to it.
* All kernel_args data is now compatible between 32-bit and 64-bit kernels.
2012-06-22 19:24:51 +01:00
Alex Smith
62d36f9833 Removed the addr_t conversion operators from FixedWidthPointer which makes comparison against NULL work properly. 2012-06-22 18:22:11 +01:00
Alex Smith
474aa3b76e Added ELF64 headers, common ELF32 and ELF64 definitions moved to elf_common.h. 2012-06-22 12:54:41 +01:00
Alex Smith
6b87898af5 Code style fixes. 2012-06-22 11:56:55 +01:00
Alex Smith
17e407e945 Proper implementation of arch_kernel.h for x86_64. 2012-06-22 10:53:08 +01:00
Alex Smith
17a3389882 Remove phys_addr_range, just use addr_range for both virtual and physical address ranges (as requested by Ingo). 2012-06-21 19:48:03 +01:00
Alex Smith
d8efc6caf6 Changes to kernel_args to make it identical for x86 and x86_64.
* Added a FixedWidthPointer template class which uses 64-bit storage to hold
  a pointer. This is used in place of raw pointers in kernel_args.
* Added __attribute__((packed)) to kernel_args and all structures contained
  within it. This is necessary due to different alignment behaviour for
  32-bit and 64-bit compilation with GCC.
* With these changes, kernel_args will now come out the same size for both
  the x86_64 kernel and the loader, excluding the preloaded_image structure
  which has not yet been changed.
* Tested both an x86 GCC2 and GCC4 build, no problems caused by these changes.
2012-06-21 18:02:23 +01:00
Alex Smith
192af9e0af Changed addr_range to use uint64.
I've tested this change on x86, causing no issues. I've checked over the code
for all other platforms and made the necessary changes and to the best of my
knowledge they should also still work, but I haven't actually built and
tested them. Once I've completed the kernel_args changes the other platforms
will need testing.
2012-06-20 14:11:24 +01:00
Alex Smith
93cb9538be Don't store a KMessage in kernel_args for the boot volume, only the buffer address/size.
Pointers in kernel_args are going to be changed to unconditionally use 64-bit
storage (to make kernel_args compatible with both the x86 and x86_64 kernels).
KMessage stores a pointer to its buffer, however since KMessage is used
outside of the boot code it is undesirable to change it to use 64-bit storage
for the pointer as it may add additional overhead on 32-bit builds. Therefore,
only store the buffer address and size and then construct a KMessage from
those in the kernel.
2012-06-20 11:53:47 +01:00
Alex Smith
e114f50ddd Fixed bootloader build under x86_64. 2012-06-19 20:38:53 +01:00
Alex Smith
043c61dde5 Added stub versions of everything needed to build the kernel.
The whole kernel now builds and there are no undefined references when
linking, I just need to fix some strange relocation errors I'm getting
(probably a problem with the linker script) and then I'll have a kernel
image.
2012-06-15 22:50:59 +01:00
Alex Smith
73f27ecd3a Implementations of some libroot functions for x86_64.
These are the functions required by the kernel. These are all full
implementations except for system_time(), which will be implemented later.
2012-06-15 19:57:21 +01:00
Alex Smith
82b4b37172 Added a TODO in to say that {,u}int64 should be changed to long on x86_64. 2012-06-15 16:09:25 +01:00
Alex Smith
11d3892d28 Changed ICI data argument types from uint32 to addr_t.
Since ICI arguments are used to send addresses in some places, uint32 is
not sufficient on x86_64. addr_t still refers to the same type as uint32
(unsigned long) on other platforms, so this change only really affects
x86_64.
2012-06-14 13:06:55 +01:00
Alex Smith
f76bc433e1 Added some x86_64 system/kernel headers and kernel Jamfiles.
* Not all of these headers are correct yet, just adding what's necessary
  to get things to compile for the time being.
2012-06-13 17:45:22 +01:00
Alex Smith
23d878482e Made *_addr_t {,un}signed long rather than long long on x86_64.
* long is 64-bit on x86_64.
* Makes addr_t compatible with size_t.
2012-06-13 17:00:57 +01:00
Alex Smith
2f3e39bebf Fixed copyright date on arch_config.h. 2012-06-11 12:09:36 +01:00
Alex Smith
07b33113a3 Merge branch 'master' into x86_64 2012-06-11 12:01:35 +01:00
Alexander von Gluck IV
372863638f scsi: Add write same SCSI operation
* Will be used for TRIM
2012-06-10 18:47:12 -07:00
Alexander von Gluck IV
548b1a4988 cpuid: Rework AMD CPUID numbers
* If family is 0xF, we grab extended family and model
  like Intel does
* Idenfify AMD cpu's more correctly
2012-06-04 11:01:39 -05:00
François Revol
b837149e73 Sam460ex: Add cpu type and model defines to board_config.h
* we need this in arch_cpu.cpp in the bootloader.
2012-06-02 01:25:53 +02:00
Alexander von Gluck IV
0e8316cc90 intel_810: Style cleanup. No functional change
* I think the FunctionNames need to change to function_name
2012-05-30 16:11:09 -05:00
Gerald Zajac
e0ee3b7971 driver: New intel 810 video driver
* Introduced by Gerald Zajac in #8615
* Will need reviewed, tested, and some style cleanup
* Not in images until steps above complete
2012-05-30 15:21:18 -05:00
François Revol
9c02217342 PPC: Add PVR identifiers for 440 and 460 cpus
* from QEMU, 440EP is 0x4222.
* from the datasheet, 460EX is 0x1302.
2012-05-29 18:50:32 +02:00
Alex Smith
65ad1ba320 Made it possible to build the bootloader when targetting x86_64.
* x86_64 is using the existing *_ia32 boot platforms.
* Special flags are required when compiling the loader to get GCC to compile
  32-bit code. This adds a new set of rules for compiling boot code rather
  than using the kernel rules, which compile using the necessary flags.
* Some x86_64 private headers have been stubbed by #include'ing the x86
  versions. These will be replaced later.
2012-05-26 21:47:27 +01:00
Alexander von Gluck IV
361ec26f10 rPi MMU: Cleanup, add gPeripheralBase
* gPeripheralBase keeps track of the device
  peripherals before and after mmu_init
* Add ability to disable mmu for troubleshooting
* Remove static FB_BASE, we actually don't know
  where the FB is yet. (depends on firmware used)
2012-05-24 06:39:43 -05:00
Alexander von Gluck IV
f0ba7f9400 MMU: Clean up arm L1 MMU types
* Include map for each page table type
* Reduce MMU_TYPE define name length
2012-05-22 08:30:52 -05:00
Alexander von Gluck IV
9c5e60f656 rPi MMU: Fixes to hrev44189
* I had the wrong addresses, 0x20 was the physical
  address not a mapped one.
* Attempt to map uart in mmu post mmu_init.
2012-05-22 08:30:52 -05:00
Alexander von Gluck IV
b8733e36c7 rPi MMU: Working towards mapped memory
* BCM2708 defines no longer assume 0x20 address
  We will be throwing away the blob memory mapping
  and using our own.
* Use existing blob mapping to turn GPIO led on pre mmu_init
* Remap MMU hardware addresses from 0x7E. We could map each device,
  however the kernel will throw away the mappings again anyway. For
  now we just map the whole range and use offsets.
* Serial uart no longer works, however at least
  we know why now :). Serial driver now needs to
  use mapped address.
2012-05-18 10:16:30 -05:00
Alexander von Gluck IV
77591e9657 rPi: MMU Work
* Use U-Boot mmu code as base
* This will be factored out someday into common arch mmu
  code when we can read Flattened Device Trees
* Move mmu_init after serial_init.
  Temporary change as we will want serial_init to use
  memory mapped addresses... for debugging.
2012-05-18 06:36:53 -05:00
Alexander von Gluck IV
1f675a7fcb uart: Fix arm kernel build
* Make kernel use mmu_man's new UART code
* Remove no longer used uart.cpp / uart.h
2012-05-17 05:32:29 -05:00
François Revol
693b3532c7 Sam460ex: Add a Linux-type kernel entry point
* the onboard U-Booot and 2nd-stage loader only know a few OS types,
we'll try faking Linux there.
2012-05-17 17:36:19 +02:00
Alexander von Gluck IV
eb93f2661d uart: Style Cleanup, no functional change 2012-05-17 03:31:02 -05:00
Alexander von Gluck IV
182643f763 uart: Remove due to mmu's new (better) UART code 2012-05-17 03:15:56 -05:00
François Revol
e9ec7a55dd Attempt to factor out serial stuff
* introduce a DebugUART baseclass,
* rework 8250 and PL011 implementations from kallisti5 to inherit DebutUART,
* each arch should override the IO methods to access registers.
* on ARM registers are 32bit-aligned.
* U-Boot still works for the verdex target.
* rPi still compiles, needs testing.
* Still some more consolidation needed to allow runtime choice of the UART type (as read from FDT blobs for ex.).
* serial.cpp should probably mostly be made generic as well.
* didn't touch x86 or ppc yet.
2012-05-17 04:09:05 +02:00
Alexander von Gluck IV
85c4ab42a1 rpi cpu: Add documentation on PDF locations of registers
* Assist future developers with the location of this data
* No functional change
2012-05-15 08:34:27 -05:00
Alexander von Gluck IV
125c31a827 pl011: Make memory reads and writes 32-bits 2012-05-14 20:47:55 -05:00
François Revol
0fa5c3d115 Add board config header for ACube Sam460ex
* the UART is hardcoded for now, ideally it should be set up from the address found in the FDT blob.
2012-05-11 02:31:57 +02:00
Alexander von Gluck IV
f78cbe4710 pl011 uart: Work on uart startup code
* Add missing PL011 register locations
* Move startup code to class init and ensure port is
  started up more like Linux PL011 Amba driver.
2012-05-10 12:38:52 -05:00
czeidler
31f768577e The layout checks the target view now if the layout invalidation has been disabled in the view. 2012-05-10 10:36:41 +12:00
Alexander von Gluck IV
57a2ea0d54 uart: Replace Init calls with Enable/Disable
* Enable/Disable makes more sense and matches
  platform loader serial functions.
* Rework PL011 code after finding a PDF covering
  the details of it.
* Rename UART global defines in loader to be more
  exact about location
2012-05-09 12:46:35 -05:00
Alexander von Gluck IV
78004f1677 arm uart: Convert new uart code to classes
* This makes things a little more flexible and
  the interface to use the uarts cleaner.
* May want to make a generic Uart wrapper
  class in uart.h / uart.cpp and call drivers
  as needed from there.
2012-05-08 22:17:03 -05:00
czeidler
9c7f297dd6 Remove lp_solve headers. 2012-05-08 07:28:16 +12:00
Alexander von Gluck IV
b74906293b pl011 uart: Add port_init code
* Add code to initilize the uart port
* Fix uart clock
2012-05-06 22:53:56 -05:00
Alexander von Gluck IV
c76127fade arm uart: First work towards Amba serial driver
* Move Raspberry Pi board over to Amba driver
* Add initial set of registers and values
* Few small style cleanups
2012-05-06 19:30:43 -05:00
Alexander von Gluck IV
aa7d070732 arm uart: Rename getc/putc to getchar/getchar
* Avoid name collisions
* This uart stuff may work better as a class at
  some point, however I didn't want to rock the
  u-boot boat *too* much as I don't have the
  hardware to test.
2012-05-06 17:03:34 -05:00
Alexander von Gluck IV
917e9be1a6 arm uart: Complete redesign of ARM uart code
* Add nested function wrappers to allow usage of other
  uart drivers depending on board. We may want to use this
  on other platforms at some point (haha, maybe)
2012-05-06 17:03:33 -05:00