259065 |
07-Dec-2013 |
gjb |
- Copy stable/10 (r259064) to releng/10.0 as part of the 10.0-RELEASE cycle. - Update __FreeBSD_version [1] - Set branch name to -RC1
[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so start releng/10.0 at '100' so the branch is started with a value ending in zero.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
256281 |
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
240680 |
18-Sep-2012 |
gavin |
Align the PCI Express #defines with the style used for the PCI-X #defines. This also has the advantage that it makes the names more compact, iand also allows us to correct the non-uniform naming of the PCIM_LINK_* defines, making them all consistent amongst themselves.
This is a mostly mechanical rename: s/PCIR_EXPRESS_/PCIER_/g s/PCIM_EXP_/PCIEM_/g s/PCIM_LINK_/PCIEM_LINK_/g
When this is MFC'd, #defines will be added for the old names to assist out-of-tree drivers.
Discussed with: jhb MFC after: 1 week
|
238045 |
03-Jul-2012 |
marcel |
Support lbc interrupts: o Save and clear the LTESR register in the interrupt handler. o In lbc_read_reg(), return the saved LTESR register value if applicable (i.e. when the saved value is not invalid (read: ~0U)). o In lbc_write_reg(), clear the bits in the saved register when when it's written to and when the asved value is not invalid. o Also in lbc_write_reg(), the LTESR register is unlocked (in H/W) when bit 1 of LTEATR is cleared. We use this to invalidate our saved LTESR register value. Subsequent reads and write go to H/W directly.
While here: o In lbc_read_reg() & lbc_write_reg(), add some belts and suspenders to catch when register offsets are out of range. o In lbc_attach(), initialize completely and don't leave something left for lbc_banks_enable().
|
238042 |
02-Jul-2012 |
marcel |
Properly implement the bus_config_intr, bus_setup_intr and bus_teardown_intr methods so that MI drvers can depend on us doing the right thing instead of having to go around us and call MD code directly. See the FDT code for example (not for long though).
|
236121 |
26-May-2012 |
raj |
Import eSDHC driver for Freescale integrated controller.
Obtained from: Freescale, Semihalf Written by: Michal Dubiel
|
236119 |
26-May-2012 |
raj |
Move OpenPIC FDT bus glue to a shared location, so that other PowerPC platforms can use it, not only MPC85XX.
This is just reorg, no functional changes.
|
235937 |
24-May-2012 |
marcel |
A few improvements: 1. Define all registers. These definitions are needed to support the FCM driver for direct-connect NAND. 2. Repurpose lbc_read_reg() and lbc_write_reg() for use by localbus attached device drivers. Use bus_space functions directly in the lbc driver itself. 3. Be smarter about programming LAWs and mapping memory. The ranges defined in the FDT are per bank (= chip select) and since we can have up to 8 banks, we could easily use more than 8 LAWs or TLB enrties when per-bank memory ranges need multiple LAWs or TLBs due to alignment or size constraints. We now combine all memory ranges into the fewest possible set of contiguous regions and program the hardware for that. Thus, a cleverly written FDT with 8 devices may still only need 1 LAW or 1 TLB entry. Note that the memory ranges can be assigned randomly to the banks. We sort as we build to handle that. 4. Support the FCM when programming the OR register. This is mostly for documention purposes as we do not have a way to define the mode for a bank. 5. Remove Semihalf-ism: do not define DEBUG (only to undefine it again).
|
235935 |
24-May-2012 |
marcel |
Remove Semihakf-ism. DEBUG is a kernel configuration option. It should not be defined in source files.
|
235934 |
24-May-2012 |
marcel |
Just return if the size of the window is 0. This can happen when the FDT does not define all ranges possible for a particular node (e.g. PCI). While here, only update the trgt_mem and trgt_io pointers if there's no error. This avoids that we knowingly write an invalid target (= -1).
|
235933 |
24-May-2012 |
marcel |
Either the I/O port range or the memory mapped I/O range may not be defined in the FDT. The range will have a zero size in that case.
|
234609 |
23-Apr-2012 |
nwhitehorn |
Fix missing header for powerpc_iomb().
Pointy hat to: me
|
234579 |
22-Apr-2012 |
nwhitehorn |
Replace eieio; sync for creating bus-space memory barriers with sync. sync performs a strict superset of the functions of eieio, so using both is redundant. While here, expand bus barriers to all bus_space operations, since many drivers do not correctly use bus_space_barrier().
In principle, we can also replace sync just with eieio, for a significant performance increase, but it remains to be seen whether any poorly-written drivers currently depend on the side effects of sync to properly function.
MFC after: 1 week
|
227843 |
22-Nov-2011 |
marius |
- There's no need to overwrite the default device method with the default one. Interestingly, these are actually the default for quite some time (bus_generic_driver_added(9) since r52045 and bus_generic_print_child(9) since r52045) but even recently added device drivers do this unnecessarily. Discussed with: jhb, marcel - While at it, use DEVMETHOD_END. Discussed with: jhb - Also while at it, use __FBSDID.
|
224552 |
31-Jul-2011 |
marcel |
Fix r222813: we need to include sys/cpuset.h. because the PIC interface uses cpuset_t. While here, fix the redundant inclusion of sys/bus.h and order the includes.
Approved by: re (blanket)
|
222813 |
07-Jun-2011 |
attilio |
etire the cpumask_t type and replace it with cpuset_t usage.
This is intended to fix the bug where cpu mask objects are capped to 32. MAXCPU, then, can now arbitrarely bumped to whatever value. Anyway, as long as several structures in the kernel are statically allocated and sized as MAXCPU, it is suggested to keep it as low as possible for the time being.
Technical notes on this commit itself: - More functions to handle with cpuset_t objects are introduced. The most notable are cpusetobj_ffs() (which calculates a ffs(3) for a cpuset_t object), cpusetobj_strprint() (which prepares a string representing a cpuset_t object) and cpusetobj_strscan() (which creates a valid cpuset_t starting from a string representation). - pc_cpumask and pc_other_cpus are target to be removed soon. With the moving from cpumask_t to cpuset_t they are now inefficient and not really useful. Anyway, for the time being, please note that access to pcpu datas is protected by sched_pin() in order to avoid migrating the CPU while reading more than one (possible) word - Please note that size of cpuset_t objects may differ between kernel and userland. While this is not directly related to the patch itself, it is good to understand that concept and possibly use the patch as a reference on how to deal with cpuset_t objects in userland, when accessing kernland members. - KTR_CPUMASK is changed and now is represented through a string, to be set as the example reported in NOTES.
Please additively note that no MAXCPU is bumped in this patch, but private testing has been done until to MAXCPU=128 on a real 8x8x2(htt) machine (amd64).
Please note that the FreeBSD version is not yet bumped because of the upcoming pcpu changes. However, note that this patch is not targeted for MFC.
People to thank for the time spent on this patch: - sbruno, pluknet and Nicholas Esborn (nick AT desert DOT net) tested several revision of the patches and really helped in improving stability of this work. - marius fixed several bugs in the sparc64 implementation and reviewed patches related to ktr. - jeff and jhb discussed the basic approach followed. - kib and marcel made targeted review on some specific part of the patch. - marius, art, nwhitehorn and andreast reviewed MD specific part of the patch. - marius, andreast, gonzo, nwhitehorn and jceel tested MD specific implementations of the patch. - Other people have made contributions on other patches that have been already committed and have been listed separately.
Companies that should be mentioned for having participated at several degrees: - Yahoo! for having offered the machines used for testing on big count of CPUs. - The FreeBSD Foundation for having sponsored my devsummit attendance, which has been instrumental. - Sandvine for having offered offices and infrastructure during development.
(I really hope I didn't forget anyone, if it happened I apologize in advance).
|
222428 |
28-May-2011 |
marcel |
o Determine the number of LAWs in a way the is future proof. Only the MPC8555(E) has 8 LAWs, so don't make that the default case. Current processors have 12 LAWs so use that as the default instead. o Determine the target ID of the PCI/PCI-X and PCI-E controllers in a way that's more future proof. There's almost a perfect mapping from HC register offset to target ID, so use that as the default. Handle the MPC8548(E) specially, since it has a non-standard target ID for the PCI-E controller. Don't worry about whether the processor implements the target ID here, because we should not get called for PCI/PCI-X or PCI-E host controllers that don't exist.
|
222426 |
28-May-2011 |
marcel |
Remove unused defines. They're distracting...
|
221526 |
06-May-2011 |
jhb |
Retire isa_setup_intr() and isa_teardown_intr() and use the generic bus versions instead. They were never needed as bus_generic_intr() and bus_teardown_intr() had been changed to pass the original child device up in 42734, but the ISA bus was not converted to new-bus until 45720.
|
218184 |
02-Feb-2011 |
marcel |
Rename INTR_VEC to MAP_IRQ. From the OFW or FDT we obtain a PIC handle with interrupt pin. This we map to the resource called SYS_RES_IRQ.
|
218075 |
29-Jan-2011 |
marcel |
Fix the interrupt code, broken 7 months ago. The interrupt framework already supported nested PICs, but was limited to having a nested AT-PIC only. With G5 support the need for nested OpenPIC controllers needed to be added. This was done the wrong way and broke the MPC8555 eval system in the process.
OFW, as well as FDT, describe the interrupt routing in terms of a controller and an interrupt pin on it. This needs to be mapped to a flat and global resource: the IRQ. The IRQ is the same as the PCI intline and as such needs to be representable in 8 bits. Secondly, ISA support pretty much dictates that IRQ 0-15 should be reserved for ISA interrupts, because of the internal workins of south bridges. Both were broken.
This change reverts revision 209298 for a big part and re-implements it simpler. In particular: o The id() method of the PIC I/F is removed again. It's not needed. o The openpic_attach() function has been changed to take the OFW or FDT phandle of the controller as a second argument. All bus attachments that previously used openpic_attach() as the attach method of the device I/F now implement as bus-specific method and pass the phandle_t to the renamed openpic_attach(). o Change powerpc_register_pic() to take a few more arguments. In particular: - Pass the number of IPIs specificly. The number of IRQs carved out for a PIC is the sum of the number of int. pins and IPIs. - Pass a flag indicating whether the PIC is an AT-PIC or not. This tells the interrupt framework whether to assign IRQ 0-15 or some other range. o Until we implement proper multi-pass bus enumeration, we have to handle the case where we need to map from PIC+pin to IRQ *before* the PIC gets registered. This is done in a similar way as before, but rather than carving out 256 IRQs per PIC, we carve out 128 IRQs (124 pins + 4 IPIs). This is supposed to handle the G5 case, but should really be fixed properly using multiple passes. o Have the interrupt framework set root_pic in most cases and not put that burden in PIC drivers (for the most part). o Remove powerpc_ign_lookup() and replace it with powerpc_get_irq(). Remove IGN_SHIFT, INTR_INTLINE and INTR_IGN.
Related to the above, fix the Freescale PCI controller driver, broken by the FDT code. Besides not attaching properly, bus numbers were assigned improperly and enumeration was broken in general. This prevented the AT PIC from being discovered and interrupt routing to work properly. Consequently, the ata(4) controller stopped functioning.
Fix the driver, and FDT PCI support, enough to get the MPC8555CDS going again. The FDT PCI code needs a whole lot more work.
No breakages are expected, but lackiong G5 hardware, it's possible that there are unpleasant side-effects. At least MPC85xx support is back to where it was 7 months ago -- it's amazing how badly support can be broken in just 7 months...
Sponsored by: Juniper Networks
|
218074 |
29-Jan-2011 |
marcel |
Have nexus behave the same as the one on ARM (marvell SoCs), so as to prevent warnings during boot WRT to the fdtbus attachment.
|
212054 |
31-Aug-2010 |
nwhitehorn |
Restructure how reset and poweroff are handled on PowerPC systems, since the existing code was very platform specific, and broken for SMP systems trying to reboot from KDB.
- Add a new PLATFORM_RESET() method to the platform KOBJ interface, and migrate existing reset functions into platform modules. - Modify the OF_reboot() routine to submit the request by hand to avoid the IPIs involved in the regular openfirmware() routine. This fixes reboot from KDB on SMP machines. - Move non-KDB reset and poweroff functions on the Powermac platform into the relevant power control drivers (cuda, pmu, smu), instead of using them through the Open Firmware backdoor. - Rename platform_chrp to platform_powermac since it has become increasingly Powermac specific. When we gain support for IBM systems, we will grow a new platform_chrp.
|
209908 |
11-Jul-2010 |
raj |
Convert Freescale PowerPC platforms to FDT convention.
The following systems are affected:
- MPC8555CDS - MPC8572DS
This overhaul covers the following major changes:
- All integrated peripherals drivers for Freescale MPC85XX SoC, which are currently in the FreeBSD source tree are reworked and adjusted so they derive config data out of the device tree blob (instead of hard coded / tabelarized values).
- This includes: LBC, PCI / PCI-Express, I2C, DS1553, OpenPIC, TSEC, SEC, QUICC, UART, CFI.
- Thanks to the common FDT infrastrucutre (fdtbus, simplebus) we retire ocpbus(4) driver, which was based on hard-coded config data.
Note that world for these platforms has to be built WITH_FDT.
Reviewed by: imp Sponsored by: The FreeBSD Foundation
|
209724 |
06-Jul-2010 |
nwhitehorn |
Move the EOI logic when starting ithreads into intr_machdep instead of relying on it as a side effect of PIC_MASK() in the PIC drivers, and add an inmplementation of assign_cpu() for the kernel interrupt layer.
|
209639 |
02-Jul-2010 |
marcel |
Remove the unneeded header <machine/intr.h>.
|
209496 |
24-Jun-2010 |
marcel |
Assign PCI intline values for ISA interrupts using the new INTR_VEC() macro.
|
209493 |
24-Jun-2010 |
marcel |
Pass the device_t of the AT PIC driver to atpic_intr() so that we don't have to use a global variable. Pass a NULL frame pointer to the dispatch function just like openpic(4).
|
209489 |
23-Jun-2010 |
marcel |
With openpic(4) using active-low as the default polarity, reconfigure the internal interrupt sources as active-high. The internal interrupt sources are disabled when programmed as active-low.
Note that the internal interrupts have no sense bit like the external interrupts. We program them as edge-triggered to make sure we write a 0 value to a reserved register. It does not in any way say anything about the sense of internal interrupt.
|
209486 |
23-Jun-2010 |
nwhitehorn |
Configure interrupts on SMP systems to be distributed among all online CPUs by default, and provide a functional version of BUS_BIND_INTR(). While here, fix some potential concurrency problems in the interrupt handling code.
|
209298 |
18-Jun-2010 |
nwhitehorn |
Provide for multiple, cascaded PICs on PowerPC systems, and extend the OFW interrupt map interface to also return the device's interrupt parent.
MFC after: 8.1-RELEASE
|
205569 |
23-Mar-2010 |
marcel |
Fix an off-by-one bug for the number of slots on a PCI/PCI-X bus. We failed to setup PCI devices on slot 31 and that's where the SATA controller is for the P2020 eval board.
|
205535 |
23-Mar-2010 |
marcel |
Add definitions for a 4th PCI host controller. No Freescale processor has all 4 implemented, but across the processors we now support all the combinations. For example, the MPC8533 doesn't have a PCI controller at 0xA0000, but does at 0xB0000.
|
203352 |
01-Feb-2010 |
marcel |
Make PCI Express host controllers functional, by: 1. checking whether there's a link before initializing devices on the bus. When there's no link any access onto the bus will wedge the CPU. 2. synthesizing the class & subclass so that the host controller appears as a standard PCI bridge, rather than a PowerPC CPU.
|
203350 |
01-Feb-2010 |
marcel |
Use the capability pointer to indicate whether the host controller is PCI Express, rather than a bit-field (boolean). Saving the capability pointer this way makes access to capability-specific configuration registers easy and efficient.
|
203177 |
29-Jan-2010 |
marcel |
Don't check the device ID. Instead, check the class, subclass and programming I/F. New SoC designs have different device IDs, but don't need special treatment. Consequently, we fail to probe and attach for no other reason than not having added the device ID to the code.
Bank on Freescale's sense of backward compatibility and assume that if we find a host controller, we know how work with it.
This fixes detection of the PCI Express host controllers on Freescale's QorIQ family of processors (P1, P2 and P4).
|
199602 |
20-Nov-2009 |
marcel |
Always allocate PCI/ISA interrupts as shareable so that shared interrupts don't cause driver attach failures.
|
195799 |
21-Jul-2009 |
raj |
Do not use OCP85XX_LBC_OFF twice when accessing LBC registers on MPC85XX.
It turns LBC control registers were not programmed correctly on MPC85XX. We were accessing bogus addresses as the base offset (OCP85XX_LBC_OFF) was erroneously added during offset calculations. Effectively the state of LBC control registers was not altered by the kernel initialization code, but everything worked as long as we coincided to use the same settings (LBC decode windows) as firmware has initialized.
Submitted by: Lukasz Wojcik Reviewed by: marcel Approved by: re (kensmith) Obtained from: Semihalf
|
194849 |
24-Jun-2009 |
raj |
More precise description of the DS1553 driver.
Pointed out by: stas
|
194632 |
22-Jun-2009 |
raj |
DS1553 RTC module driver. On the MPC8555CDS system it hangs off of the LBC bus.
Obtained from: Semihalf
|
194630 |
22-Jun-2009 |
raj |
Integrated I2C controller driver (found in MPC85xx and other SOC parts).
Obtained from: Freescale, Semihalf
|
193579 |
06-Jun-2009 |
raj |
Initial version of the sec(4) driver for the integrated security engine found in Freescale system-on-chip devices.
The following algorithms and schemes are currently supported: - 3DES, AES, DES - MD5, SHA1, SHA256, SHA384, SHA512
Reviewed by: philip Obtained from: Freescale, Semihalf
|
193144 |
31-May-2009 |
marcel |
Mark the cascaded AT interrupt handler as MP safe to avoid having it grab Giant. The next step would be to make it a filter.
|
192532 |
21-May-2009 |
raj |
Initial support for SMP on PowerPC MPC85xx.
Tested with Freescale dual-core MPC8572DS development system.
Obtained from: Freescale, Semihalf
|
192531 |
21-May-2009 |
raj |
Skip interleaved RAM target on MPC85xx during renitialization of the local access windows. This eliminates hangs on systems which are configured to use interleaved mode: prior to this fix we were simply cutting ourselves from access to the main memory in this case.
Obtained from: Freescale, Semihalf
|
191450 |
24-Apr-2009 |
marcel |
Add suppport for ISA and ISA interrupts to make the ATA controller in the VIA southbridge functional in the CDS (Configurable Development System) for MPC85XX. The embedded USB controllers look operational but the interrupt steering is still wrong.
|
189757 |
13-Mar-2009 |
raj |
Make MPC85xx LAW handling and reset routines aware of the MPC8548 variant.
Inspired by discussion with Alexey V Fedorov on freebsd-powerpc@.
|
186288 |
18-Dec-2008 |
raj |
Extend and improve MPC85XX Local Bus management.
- Make LBC resources management self-contained: introduce explicit LBC resources definition (much like the OCP), provide dedicated rman for LB mem space.
- Full configuration of an LB chip select device: program LAW and BR/OR, map into KVA, handle all LB attributes (bus width, machine select, ecc, write protect etc).
- Factor out LAW manipulation routines into shared code, adjust OCP area accordingly.
- Other LBC fixes and clean-ups.
Obtained from: Semihalf
|
186228 |
17-Dec-2008 |
raj |
Minor clean up of BookE/MPC85XX: iprove naming and style(9).
|
186227 |
17-Dec-2008 |
raj |
Improve MPC85XX helper routines.
- Move CCSR accessors to the shared MPC85XX area - Simplify SVR version subfield handling - Adjust OCP
|
184250 |
25-Oct-2008 |
marcel |
Add a driver for the Local Bus Controller.
Obtained from: Juniper Networks, Inc.
|
184249 |
25-Oct-2008 |
marcel |
Assign 0xff800000-0xffffffff to the LBC controller. That's where the NOR flash lives by default.
|
178618 |
27-Apr-2008 |
marcel |
Remove mfsvr(): o The function is defined unconditionally but depends on SPR_SVR, which is defined conditionally. o spr.h defines mfspr() and mtspr(), which is no worse to use.
|
178597 |
26-Apr-2008 |
raj |
Use RSTCR for resetting the MPC8572 (the old way does not apply).
Obtained from: Freescale, Semihalf
|
178596 |
26-Apr-2008 |
raj |
Introduce a dedicated file for MPC85xx-specific routines. Move cpu_reset() there, as it's not relevant to Book-E specification, but is an implementation detail, directly dependent on the given SoC version.
|
178595 |
26-Apr-2008 |
raj |
Improve handling of Local Access Windows on MPC85xx systems:
- detect number of LAWs in run time and initalize accordingly - introduce decode windows target IDs used in MPC8572 - other minor updates
Obtained from: Freescale, Semihalf
|
177110 |
12-Mar-2008 |
raj |
Obtain TSEC h/w address from the parent bus (OCP) and not rely blindly on what might be currently programmed into the registers.
Underlying firmware (U-Boot) would typically program MAC address into the first unit only, and others are left uninitialized. It is now possible to retrieve and program MAC address for all units properly, provided they were passed on in the bootinfo metadata.
Reviewed by: imp, marcel Approved by: cognet (mentor)
|
176964 |
09-Mar-2008 |
marcel |
Don't use in32() and out32() when writing to the CCSRBAR. The in*() and out*() primitives should not be used, other than by ISA drivers. In this case they were used for memory-mapped I/O and were not even used in the spirit of the primitives.
|
176918 |
07-Mar-2008 |
marcel |
Add support for the BUS_CONFIG_INTR() method to the platform and to openpic(4). Make use of it in ocpbus(4). On the MPC85xxCDS, IRQ0:4 are active-low.
|
176836 |
05-Mar-2008 |
marcel |
o We don't have to keep track of the PIC, nor do we have to make sure it's probed first. The PowerPC platform code deals with everything. As such, probe devices in order of their location in the memory map. o Refactor the ocpbus_alloc_resource for readability and make sure we set the RID in the resource as per the new convention.
|
176832 |
05-Mar-2008 |
marcel |
o Various fixes related to PCI Express: - Even for the PCI Express host controller we need to use bus 0 for configuration space accesses to devices directly on the host controller's bus. - Pass the maximum number of slots to pci_ocp_init() because the caller knows how many slots the bus has. Previously a PCI or PCI-X bus underneath a PCI Express host controller would not be enumerated properly. o Pull the interrupt routing logic out of pci_ocp_init() and into its own function. The logic is not quite right and is expected to be a bit more complex. o Fix/add support for PCI domains. The PCI domain is the unit number as per other PCI host controller drivers. As such, we can use logical bus numbers again and don't have to guarantee globally unique bus numbers. Remove pci_ocp_busnr. Return the highest bus number ito the caller of pci_ocp_init() now that we don't have a global variable anymore. o BAR programming fixes: - Non-type0 headers have at most 1 BAR, not 0. - First write ~0 to the BAR in question and then read back its size.
Obtained from: Juniper Networks (mostly)
|
176779 |
04-Mar-2008 |
marcel |
Add the pic_ipi method. While here, eliminate the unused openpic_ocpbus_softc struct.
|
176771 |
03-Mar-2008 |
raj |
Initial support for Freescale PowerQUICC III MPC85xx system-on-chip family.
The PQ3 is a high performance integrated communications processing system based on the e500 core, which is an embedded RISC processor that implements the 32-bit Book E definition of the PowerPC architecture. For details refer to: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC8555E
This port was tested and successfully run on the following members of the PQ3 family: MPC8533, MPC8541, MPC8548, MPC8555.
The following major integrated peripherals are supported:
* On-chip peripherals bus * OpenPIC interrupt controller * UART * Ethernet (TSEC) * Host/PCI bridge * QUICC engine (SCC functionality)
This commit brings the main functionality and will be followed by individual drivers that are logically separate from this base.
Approved by: cognet (mentor) Obtained from: Juniper, Semihalf MFp4: e500
|